我只是想出了menu_position参数,看来您几乎可以将自定义帖子类型的菜单放在任何地方。除了“帖子”菜单上方的内容!

我该如何完成?

评论

好问题,似乎那是一个不会去的地方。

#1 楼

核心菜单项的位置

2仪表板
4分隔符
5帖子
10 Media
15链接
20页
25注释
59分隔符
60外观
65插件
70用户
75工具
80设置
99分隔符

“菜单位置”的参数说明

$position(整数)(可选)应该显示菜单顺序中的位置
。默认情况下,如果省略此参数,
菜单将出现在菜单结构的底部。
数字越大,在菜单中的位置越低。
警告:如果两个菜单项
使用相同的position属性,则其中一项可能会被覆盖
,这样仅显示一项!可以通过
使用十进制而不是整数值来减少冲突的风险,例如63.3而不是63。
默认值:菜单结构的底部


评论


如何在'menu_position'=> 3中使用小数?我想将position = 3用于许多自定义帖子类型。

– Bikram
20-2-4在9:19

#2 楼

新的JetPack插件将其菜单链接放置在仪表板链接的正下方。这样做是通过将其菜单顺序设置为0,通过过滤$ menu_order数组来实现的:

function jetpack_menu_order( $menu_order ) {
        $jp_menu_order = array();

        foreach ( $menu_order as $index => $item ) {
            if ( $item != 'jetpack' )
                $jp_menu_order[] = $item;

            if ( $index == 0 )
                $jp_menu_order[] = 'jetpack';
        }

        return $jp_menu_order;
    }


出于好奇,如果尝试将0用作menu_position会发生什么? br />

#3 楼

在网络上寻找解决方案,但未找到。只需执行此技巧(例如)。在这里,您具有职位的本地列表:



2仪表板
4分隔符
5帖子
10媒体
15链接
20页
25条评论
59分隔符
60外观
65插件
70用户
75工具
80设置
99分隔符



如果有更多项目,则可以通过打印全局$ menu来读取每个项目的当前位置:

global $menu; 
print_r($menu); 


所以,如果我很好理解,没有什么可以阻止我们像我们想要的那样重新排序菜单:

function re_order_menu () {
    // ------- Put away items 
    $dashboard = $menu[2]
    $separator1 = $menu[4]
    $posts = $menu[5]
    $media = $menu[10]
    $links = $menu[15]
    $pages = $menu[20]
    $comments = $menu[25]
    $separator2 = $menu[59]
    $appearance = $menu[60]
    $plugins = $menu[65]
    $users = $menu[70]
    $tools = $menu[75]
    $settings = $menu[80]
    $separator3 = $menu[99]

    // -------- Reset menu  
    unset($menu[2]);
    unset($menu[4]);
    unset($menu[5]);
    unset($menu[10]);
    unset($menu[15]);
    unset($menu[20]);
    unset($menu[25]);
    unset($menu[59]);
    unset($menu[60]);
    unset($menu[65]);
    unset($menu[70]);
    unset($menu[75]);
    unset($menu[80]);
    unset($menu[99]);

    // -------- Re-order menu as you want
    $dashboard = $menu[2];
    $separator1 = $menu[4]
    $posts = $menu[5];
    $books = $menu[6];
    /* my tons of custom items */
    $authors  = $menu[7];
    $requests = $menu[8];
    $clients = $menu[9];
    $sellers  = $menu[10];
    $services = $menu[11];
    $schedules = $menu[12];
    /* let some space after */ 
    $media = $menu[30];
    $links = $menu[31];
    $pages = $menu[32];
    $comments = $menu[33];
    $separator2 = $menu[59];
    $appearance = $menu[60];
    $plugins = $menu[65];
    $users = $menu[70];
    $tools = $menu[75];
    $settings = $menu[80]
    $separator3 = $menu[99];

} 
add_action('admin_menu', 're_order_menu');


它很好用对我来说,我认为这是合法的,我错了吗?

评论


依靠魔术数字的非常脆弱的解决方案。一旦添加/删除了其他插件,该插件就会中断。

–沃尔夫
19年11月12日23:19



#4 楼

我用过'menu_postion'=> 0,1,2,3,4。

没关系。如果您玩弄它,则可以轻松解决。

使用'menu_position'=> 1应该将其放在分隔符上方的Dashboard菜单项下方。 0应将其放在仪表板上方

#5 楼

这是WordPress中的错误。请在Trac中查看此线程:http://core.trac.wordpress.org/ticket/14755

已修复4.4 ...

https:// developer。 wordpress.org/reference/functions/add_menu_page/#notes

#6 楼

您可以使用此功能:

function my_move_post () {
    global $menu;
    $menu[6] = $menu[5]; //move post from post 5 to 6
    unset($menu[5]); //free the position 5 so you can use it!
}
add_action('admin_menu', 'my_move_post');


现在您可以使用位置5在“发布”菜单上方添加菜单。

评论


这对我不起作用。我将其放置在我的全站点插件中,我的custom-post-type.php文件在其中

–丹尼尔(Daniel)
14年8月14日在16:19

#7 楼

这是整个问题的警告...

WordPress 4.9.2

wp-admin / menu.php:

// If we're to use $_wp_last_object_menu, increment it first.
$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; 


注意:必须为整数且尚未设置,否则将进入列表的底部。

#8 楼

对于WordPress 5及以下版本中的可行解决方案,请使用以下代码重新定位:

 add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
    if (
        false !== ($k1 = array_search($v1 = 'edit.php', $menu_order))
        && false !== ($k2 = array_search($v2 = 'edit.php?post_type=foo', $menu_order))
    ) {
        array_splice($menu_order, $k1, 0, $v2);
        array_splice($menu_order, $k2 + 1, 1);
    }
    return $menu_order;
});
 


这假定您没有多个菜单项争夺杆位。

#9 楼

在链接的同一链接上,它显示为:

menu_position
(integer) (optional) The position in the menu order the post type should appear.
Default: null - defaults to below Comments
5 - below Posts
10 - below Media
20 - below Pages
60 - below first separator
100 - below second separator


因此,如果将menu_position设置为4之类的东西,则应将其放在帖子上方。
-1的位置将其置于Dashboard链接上方。

评论


我尝试了4,但与5完全相同。

– janoChen
2011-2-7在19:23

嗯尝试过1-3次?我认为也许“ 1”(或“ 0”)是仪表板。也许2-3的东西会起作用

–扎克
2011年2月7日在20:32

0 1 2 3在仪表板之前,在帖子下方4。真的是不可能的!

– janoChen
2011-2-8在5:44



哇。破坏了很多WordPress?那我不知道:-/

–扎克
2011-2-8在5:52

我认为4是Posts上方的分隔符,5是Posts,因此,如果将菜单位置设置为3,它将位于分隔符之前。当然使用默认配置。将我的插件页面设置为4覆盖了分隔符,但确实出现在帖子上方。嗯...

– Goldenapples
2011年3月28日19:50

#10 楼

您可以使用十进制值(作为字符串)。例如,我有一些自定义帖子类型,它们放置在菜单的最后位置(100001、100002、100003)。

然后,只需将此代码放在“帖子”上方和“仪表板”菜单项下方即可。

function reorder_admin_menu() {

  global $menu;

  // Add one separator

  $menu["3.1"] = array(
    0 =>  '',
    1 =>  'read',
    2 =>  'separator_' . "anything_unique",
    3 =>  '',
    4 =>  'wp-menu-separator'
    );

  // I have put my menu items waay at the end (exactly these values), so move them up

  $menu["3.2"] = $menu[100001];
  $menu["3.3"] = $menu[100002];
  $menu["3.4"] = $menu[100003];

  unset($menu[100001]);
  unset($menu[100002]);
  unset($menu[100003]);

  // move Media menu (position 10) item to front, in the same group
  $menu["3.5"] = $menu[10];
  unset($menu[10]);

  // Debug: ksort($menu); error_log( var_export( $menu, true ) );
}

add_action( 'admin_menu', 'reorder_admin_menu', 999 );