it-swarm.xyz

Размещение меню пользовательского типа сообщения над меню сообщений Использование menu_position?

Я только что разобрался с параметром menu_position кажется, что вы можете разместить меню своего пользовательского типа поста почти везде. За исключением выше меню сообщений!

Как я могу это сделать?

16
janoChen

Позиции для основных пунктов меню

  • 2 Панель инструментов
  • 4 разделитель
  • 5 сообщений
  • 10 СМИ
  • 15 ссылок
  • 20 страниц
  • 25 комментариев
  • 59 Сепаратор
  • 60 Внешний вид
  • 65 плагинов
  • 70 пользователей
  • 75 инструментов
  • 80 настроек
  • 99 Сепаратор

Описание параметра для "позиции меню"

$position ( integer ) (необязательно) Позиция в порядке меню, которое должно появиться в этом меню. По умолчанию, если этот параметр не указан, меню будет отображаться в нижней части структуры меню. Чем выше число, тем ниже его позиция в меню.

ПРЕДУПРЕЖДЕНИЕ: если два элемента меню используют один и тот же атрибут позиции, один из элементов может быть перезаписан, так что отображается только один элемент! Риск конфликта может быть уменьшен при использовании десятичных вместо целочисленных значений, например, 63,3 вместо 63.

По умолчанию: нижняя часть структуры меню

13
Michael Ecklund

Новый плагин 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?

4
Chip Bennett

Это ошибка в WordPress. Пожалуйста, смотрите эту ветку в Trac: http://core.trac.wordpress.org/ticket/14755

Исправлено в 4.4 ...

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

2
Merne

Я использовал 'menu_postion' => 0, 1,2,3,4.

На самом деле не имеет значения. Если вы поэкспериментируете с этим, вы можете легко понять это.

Использование 'menu_position' => 1 должно поместить его ниже пункта меню Dashboard над разделителем. 0 Следует разместить его над приборной панелью

2
jaredwilli

Ищите решение в сети, но не нашли. Просто делает этот трюк (например). Здесь у вас есть родной список позиций:

  • 2 Панель инструментов
  • 4 разделитель
  • 5 сообщений
  • 10 СМИ
  • 15 ссылок
  • 20 страниц
  • 25 комментариев
  • 59 Сепаратор
  • 60 Внешний вид
  • 65 плагинов
  • 70 пользователей
  • 75 инструментов
  • 80 настроек
  • 99 Сепаратор

Если у вас есть больше элементов, вы можете прочитать текущую позицию для каждого элемента, напечатав глобальное меню $:

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

У меня это нормально работает, так что, думаю, это законно, я не прав?

2
Nolan Crochot

вот предостережение ко всему вопросу ...

WordPress 4.9.2

сор-админ/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
Artistan

Вы можете использовать это:

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, чтобы добавить ваше меню над меню Post.

1
eduardogoncalves

На той же ссылке, на которую вы ссылаетесь, написано:

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.

1
Zack

Для рабочего решения в WordPress 4.9 установите menu_position вашего CPT на 6, на один больше, чем Posts ', а затем поменяйте их местами со следующим кодом:

add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
    $k = array_search($v = 'edit.php', $menu_order);
    $menu_order[$k] = $menu_order[$k + 1];
    $menu_order[$k + 1] = $v;
    return $menu_order;
});

Это предполагает, что у вас не более одного пункта меню, претендующего на позицию полюса.

1
Walf

Вы можете использовать десятичные значения (как строки). Например, у меня есть несколько пользовательских типов записей, которые я поместил в последнюю позицию в меню (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 );
0
Vladan