Розміщення користувальницького типу публікації над меню повідомлень за допомогою меню_позиції?


17

Щойно я з’ясував параметр menu_position, здається, ви можете розмістити меню свого спеціального типу публікації майже скрізь. За винятком меню "Повідомлення"!

Як я можу це досягти?


Добре питання, здається, що це одне місце, куди воно не піде.
jnthnclrk

Відповіді:


14

Позиції для основних елементів меню

  • 2 Інформаційна панель
  • 4 Роздільник
  • 5 дописів
  • 10 ЗМІ
  • 15 посилань
  • 20 Стор
  • 25 коментарів
  • 59 Роздільник
  • 60 Зовнішній вигляд
  • 65 Плагіни
  • 70 користувачів
  • 75 Інструменти
  • 80 Налаштування
  • 99 Роздільник

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

$position( ціле число ) ( необов’язково ) Позиція в порядку меню цього меню має відображатися. За замовчуванням, якщо цей параметр опущено, меню з’явиться внизу структури меню. Чим більша цифра, тим менша її позиція в меню.

ПОПЕРЕДЖЕННЯ: якщо два пункти меню використовують один і той же атрибут позиції, один із елементів може бути перезаписаний так, що відображається лише один елемент! Ризик конфлікту можна зменшити, використовуючи десяткові замість цілих значень, наприклад 63,3 замість 63.

За замовчуванням: внизу структури меню


4

Новий плагін 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 як меню_позиції?


2

Я використав 'menu_postion' => 0, 1,2,3,4.

Це не має значення насправді. Якщо ви пограєте з ним, ви можете легко зрозуміти це.

Використовуючи 'menu_position' => 1, слід розмістити його під пунктом меню на панелі інструментів над елементом розділення. 0 Помістіть його над приладовою панеллю


2

Шукали рішення в Інтернеті, але не знайшли. Просто робить цей трюк (наприклад). Тут у вас є рідний список посад:

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

Для мене це добре працює, я думаю, це законно, я помиляюся?


Дуже крихке рішення, яке спирається на магічні числа . Він буде зламаний, як тільки доданий / вилучений якийсь інший плагін, який розмістить елемент серед інших.
Вальф


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_positionщось на кшталт 4, то це повинно ставити це над повідомленнями.

Позиція -1ставить його над Dashboardпосиланням.


Я спробував 4, але це точно так само, як 5.
janoChen

Грн. Пробував 1-3? Я думаю, що, можливо, "1" (або "0") - приладова панель. Можливо, щось 2-3 спрацює
Зак

0 1 2 3 Переходить до інформаційної панелі та 4 - нижче повідомлень. Це справді неможливо!
janoChen

Ого. багато зламали WordPress? Я тоді не знаю. : - /
Зак

Я думаю, що 4 - це роздільник праворуч над "Повідомленнями", а 5 - "Повідомлення", тож якщо ви встановите позицію меню на 3, це буде прямо перед роздільником. З конфігурацією за замовчуванням звичайно. Встановлення моєї сторінки плагінів на 4 переробив роздільник, але з'явилося трохи вище Повідомлень. хммм ...
goldenapples

0

Ви можете використовувати десяткові значення (як рядки). Наприклад, у мене є деякі спеціальні типи публікацій, які я розмістив на останньому місці в меню (100001, 100002, 100003).

Потім, просто помістіть цей код , щоб перемістити їх вище повідомлення і нижче Dashboard пунктів меню.

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 );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.