使用menu_position将自定义帖子类型菜单放置在“帖子”菜单上方?


Answers:


14

核心菜单项的位置

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

“菜单位置”的参数说明

$position整数)(可选)此菜单应在菜单顺序中出现的位置。默认情况下,如果省略此参数,则菜单将出现在菜单结构的底部。数字越大,其在菜单中的位置越低。

警告:如果两个菜单项使用相同的position属性,则其中一项可能会被覆盖,从而仅显示一项!使用十进制而不是整数可以减少冲突的风险,例如63.3而不是63。

默认值:菜单结构的底部


4

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

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会发生什么情况?


2

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

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

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


2

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

  • 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');

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


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


1

您可以使用此:

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

1

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

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; 

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


1

对于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;
});

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


0

在您链接的同一链接上,其内容为:

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_position4,则应将其放在帖子上方。

-1将其放置在Dashboard链接上方的位置。


我试过4,但它完全一样的5
janoChen

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

0 1 2 3转到仪表板之前,而4转到帖子下面。真的是不可能的!
janoChen 2011年

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

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

0

您可以使用十进制值(作为字符串)。例如,我将一些自定义帖子类型放置在菜单的最后位置(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 );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.