有谁知道如何添加管理菜单分隔符?我发现了这个,但没有帮助。

有什么想法吗?

评论

如果仍然有人在寻找答案,此插件可以处理该工作。

#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-firstmenu-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是分隔符位置,您必须记住,如果分隔符位置具有相同位置,则可以替换菜单元素。