给 WordPress 后台菜单重新排序
前言
这是一个比较特殊的需求,某位客户定制的模板新增了大量的自定义菜单项,需要对主菜单进行重新排序以方便后续的内容管理和日常使用。我发现 WordPress 核心扩展出的原始管理菜单一看源码就让人忍不住要说一声“卧槽”,不明白 WP 团队为嘛要这么设计,做个人不好嘛。
但是经过简单研究,我还是找到了一种简单的解决方法,这里抛砖引玉。
自定义菜单排序
以下代码可以作为一个插件使用,也可以添加到主题的 Functions.php 中。
// 管理菜单重新排序
function wopus_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array(
'index.php', // 仪表盘
'edit.php?post_type=custom_type_one', // 自定义文章类型1
'edit.php?post_type=custom_type_two', // 自定义文章类型2
'edit.php?post_type=custom_type_three', // 自定义文章类型3,其它以此类推
'separator1', // 第一分隔符
'edit.php?post_type=page', // 页面
'edit.php', // 文章
'upload.php', // 媒体
'link-manager.php', // 链接
'edit-comments.php', // 评论
'separator2', // 第二分隔符
'themes.php', // 外观
'plugins.php', // 插件
'users.php', // 用户
'tools.php', // 工具
'options-general.php', // 设置
'separator-last', // 第三分隔符
);
}
add_filter('wopus_menu_order', 'wopus_menu_order'); // 激活自定义排序
add_filter('menu_order', 'wopus_menu_order');
如果是作为单独的插件使用,不要忘记插件钩子:
register_activation_hook(__FILE__, 'wopus_menu_order');
尾声
我不想把自己绕进 Menu_Order() 这个巨坑中,于是使用了这个简单的解决方法。原版管理菜单中的项目,如果没有写在方法里,不会被删除或隐藏,会被附到管理菜单的底部。
参考:http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order