Я только что выяснил параметр menu_position, кажется, что вы можете разместить меню своего пользовательского типа поста почти везде. За исключением выше меню сообщений!
Как я могу это сделать?
Я только что выяснил параметр menu_position, кажется, что вы можете разместить меню своего пользовательского типа поста почти везде. За исключением выше меню сообщений!
Как я могу это сделать?
Ответы:
Позиции для основных пунктов меню
Описание параметра для «позиции меню»
$position
( целое число ) ( необязательно ). Положение в меню должно отображаться в этом меню. По умолчанию, если этот параметр не указан, меню будет отображаться в нижней части структуры меню. Чем выше число, тем ниже его позиция в меню.ПРЕДУПРЕЖДЕНИЕ: если два элемента меню используют один и тот же атрибут позиции, один из элементов может быть перезаписан, так что отображается только один элемент! Риск конфликта можно уменьшить, используя десятичные вместо целочисленных значений, например, 63,3 вместо 63.
По умолчанию: нижняя часть структуры меню
Новый плагин 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?
Я использовал 'menu_postion' => 0, 1,2,3,4.
На самом деле не имеет значения. Если вы поэкспериментируете с этим, вы можете легко понять это.
Использование 'menu_position' => 1 должно разместить его под элементом меню Dashboard над разделителем. 0 Следует разместить его над приборной панелью
Ищите решение в сети, но не нашли. Просто делает этот трюк (например). Здесь у вас есть родной список позиций:
- 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');
У меня это нормально работает, так что, думаю, это законно, я не прав?
Это ошибка в WordPress. Пожалуйста, смотрите эту ветку в Trac: http://core.trac.wordpress.org/ticket/14755
Исправлено в 4.4 ...
https://developer.wordpress.org/reference/functions/add_menu_page/#notes
Вы можете использовать это:
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.
вот предостережение ко всему вопросу ...
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;
ВНИМАНИЕ: должно быть целым числом, а НЕ уже установлено, в противном случае оно попадает в конец списка.
Для рабочего решения в 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;
});
Это предполагает, что у вас не более одного пункта меню, претендующего на позицию полюса.
На той же ссылке, на которую вы ссылаетесь, написано:
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
ссылки.
Вы можете использовать десятичные значения (как строки). Например, у меня есть несколько пользовательских типов записей, которые я поместил в последнюю позицию в меню (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 );