有什么想法吗?
#1 楼
这是一种快速而肮脏的方式来获取您想要的东西。背景
WordPress将管理菜单部分存储在名为
$menu
的全局数组中。要添加分隔符,请使用要分隔的选项的索引之间的索引向$menu
数组添加元素。 使用
add_admin_menu_separator()
函数因此,我编写了一个函数来封装我称之为
add_admin_menu_separator()
的逻辑。您需要选择一个大于要添加分隔符的选项的数组索引号,然后调用函数add_admin_menu_separator()
,将所述索引作为参数传递。 例如:
add_admin_menu_separator(37);
add_admin_menu_separator()
函数本身这里是函数
add_admin_menu_separator()
的定义,您可以复制到主题的functions.php
文件中。是的,它是奥秘的,但是创建和使用全局$menu
数组的代码也是如此。 (谢天谢地,计划最终弃用它,但这可能要花几年时间。)要弄清楚您需要什么索引号,可以从
$menu
挂钩中执行var_dump()
的$GLOBALS['menu']
。这是一段代码,您可以暂时将其放入主题的admin_init
文件中,以查看值是什么。这仅在请求以functions.php
开头的URL时才有效(但请确保与FTP关联,而不与内置主题编辑器关联,否则您将失去对站点的访问权限,至少直到获得对主题的/wp-admin/
文件的FTP访问权限为止! ):function add_admin_menu_separator($position) {
global $menu;
$index = 0;
foreach($menu as $offset => $section) {
if (substr($section[2],0,9)=='separator')
$index++;
if ($offset>=$position) {
$menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
break;
}
}
ksort( $menu );
}
另请参见:
BTW,您可能会发现这些链接通常对管理菜单有用:
更改管理菜单部分的顺序
最新:
functions.php
尽管我的管理菜单类目前不提供添加分隔符的简便方法,但我认为现在我会在有空的时候补充。
评论
谢谢迈克,我整夜都在研究全局var菜单,但是我没有设法添加一个分隔符,现在我对菜单在wp中的工作方式更加清楚了。
–user1147
2010-10-7 16:53
@ user1147,您好:是的,他们很难弄清楚。刚开始时,我花了很多时间,但我仍在与他们斗争。因此,为什么要编写这些函数,所以从现在起我可以通过简单的方法来完成它!无论如何,很高兴我的回答有所帮助。
– MikeSchinkel
2010-10-7 17:39
@MikeSchinkel此方法不适用于Wordpress 3.3.1。
– Jim Geurts
2012年1月9日在22:49
@JimGeurts-对我也不起作用:/
–埃文·马特森(Evan Mattson)
2012-04-24 17:56
我刚刚对其进行了测试,它在4.5版中可以“正常工作”,但是WordPress决定摆脱这些限制,因为它们不再出现了。我认为如果要添加CSS的解决方案,但是对我而言,由于我是后端开发人员并且精通CSS,所以我不知道要添加什么CSS。也许其他人可以建议?
– MikeSchinkel
16年6月23日在1:23
#2 楼
很容易做到:add_action( 'admin_init', 'add_sep' );
function add_sep() {
if ( ! is_admin() )
return false;
global $menu;
$sep = $menu[4]; // that's the default separator
$pos = 6; // change it for the desired position
$menu = array_merge(
array_slice( $menu, 0, $pos ),
array( $sep ),
array_slice( $menu, $pos + 1, -1)
);
$menu[ $pos - 1 ][4] .= ' menu-top-last';
$menu[ $pos + 1 ][4] .= ' menu-top-first';
}
注意:默认分隔符位置(
$menu[4]
)可以不同,具体取决于您在此钩子之前所做的配置(或您的插件)。 br /> 当然,您也可以调整
menu-top-first
和menu-top-last
类的自省。#3 楼
如果没有添加分隔符的某些问题,那是由于wordpress删除重复的分隔符的方式。在函数底部添加ksort($menu);
更正了该问题。#4 楼
这是基于MastaBaba的答案而建立的,但是不会在您指定的位置替换任何内容-只会在之后添加分隔符。还使用匿名函数,因此仅与PHP 5.3及更高版本兼容。 />
add_action( 'admin_menu', function () {
$position = 29;
global $menu;
$separator = [
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
];
if (isset($menu[$position])) {
$menu = array_splice($menu, $position, 0, $separator);
} else {
$menu[$position] = $separator;
}
});
#5 楼
确定您要执行的操作有点困难,但是我认为您正在寻找在WordPress管理菜单中添加顶级条目的信息。请参阅WordPress Codex中的此文档。
简而言之,您正在寻找
add_menu_page()
函数的用法,该函数需要多个参数,并在管理菜单中以“仪表板”,“帖子”,“ Media”等。希望我做对了。 :-)
评论
我只是想添加一个管理菜单分隔符。在发布问题之前,我尝试使用add_menu_page()。
–user1147
2010-10-6 20:56
看起来MikeSchinkel可以让您很好地覆盖。对不起,误会了。祝好运!
– dgw
2010-10-7 20:41
#6 楼
以下广告将呈现管理菜单时运行的Wordpress操作。管理菜单是一个数组,您要做的就是在您指定的位置添加一个定义分隔符的数组元素。来自此处:
add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
);
}
请注意,尽管这与当前接受的答案很像,但是当前接受的答案对我不起作用(从评论中可以看出,还有其他几个问题)。
评论
除了您不作任何解释外,现有的已接受答案没有任何区别。请阅读如何回答。
– fuxia♦
16年6月19日在15:19
@toscho:嗯,这对我有用,但被接受的答案无效。
– MastaBaba
16年6月19日在17:22
#7 楼
您可以简单地将其添加到functions.php中。add_action('admin_menu', function () {
global $menu;
$menu[49] = ['', 'read', '', '', 'wp-menu-separator'];
});
其中49是分隔符位置,您必须记住,如果分隔符位置具有相同位置,则可以替换菜单元素。
评论
如果仍然有人在寻找答案,此插件可以处理该工作。