Ответы:
Вот быстрый и грязный способ получить то, что вы хотите.
WordPress хранит разделы меню администратора в глобальном массиве под названием $menu
. Чтобы добавить разделитель, вы добавляете элемент в $menu
массив, используя индекс между индексами опций, которые вы хотите разделить.
add_admin_menu_separator()
функциюИтак, я написал функцию для инкапсуляции логики для этого я вызвал add_admin_menu_separator()
. Вам нужно будет выбрать индексный номер массива, который больше, чем параметр, после которого вы хотите добавить разделитель, а затем вызвать функцию, add_admin_menu_separator()
передающую указанный индекс в качестве вашего параметра.
Например:
add_admin_menu_separator(37);
add_admin_menu_separator()
функцияВот определение функции, add_admin_menu_separator()
которую вы можете скопировать в functions.php
файл вашей темы . Да, это загадочно, но также и код, который создает и использует глобальный $menu
массив. (К счастью, в конечном итоге это будет осуждается, но, вероятно, это займет несколько лет.)
function add_admin_menu_separator($position) {
global $menu;
$index = 0;
foreach($menu as $offset => $section) {
if (substr($section[2],0,9)=='separator')
$index++;
if ($offset>=$position) {
$menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
break;
}
}
ksort( $menu );
}
$menu
том, что вам нужноДля того, чтобы выяснить , какой номер индекса вам нужно вы можете сделать var_dump()
из $GLOBALS['menu']
изнутри admin_init
крючка. Вот немного кода, который вы можете functions.php
временно вставить в файл вашей темы, чтобы увидеть, каковы значения. Это будет работать только при запросе URL-адреса, начинающегося с /wp-admin/
(но обязательно используйте FTP, а не встроенный редактор тем, иначе вы потеряете доступ к своему сайту, по крайней мере, пока не получите FTP-доступ к functions.php
файлу вашей темы !) :
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
Кстати, вы можете найти эти ссылки в целом полезными для работы с меню администратора:
Хотя мои классы меню администратора в настоящее время не предлагают простой способ добавления разделителей, я думаю, что теперь я добавлю это, когда у меня будет время.
Это просто как:
add_action( 'admin_init', 'add_sep' );
function add_sep() {
if ( ! is_admin() )
return false;
global $menu;
$sep = $menu[4]; // that's the default separator
$pos = 6; // change it for the desired position
$menu = array_merge(
array_slice( $menu, 0, $pos ),
array( $sep ),
array_slice( $menu, $pos + 1, -1)
);
$menu[ $pos - 1 ][4] .= ' menu-top-last';
$menu[ $pos + 1 ][4] .= ' menu-top-first';
}
Примечание. Положение разделителя по умолчанию ( $menu[4]
) может отличаться в зависимости от того, какую конфигурацию вы (или ваши плагины) выполнили до этого хука.
Конечно, вы можете также настроить menu-top-first
и menu-top-last
классы самоанализа.
Если некоторые проблемы с разделителями не были добавлены, это было связано с тем, как WordPress удаляет дубликаты разделителей. Добавление ksort($menu);
в конец функции исправило проблему.
Это основано на ответе MastaBaba, но не заменяет ничего в указанной вами позиции - оно просто добавляет разделитель впоследствии.
Также использует анонимную функцию, поэтому она совместима только с PHP версии 5.3 и выше.
add_action( 'admin_menu', function () {
$position = 29;
global $menu;
$separator = [
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
];
if (isset($menu[$position])) {
$menu = array_splice($menu, $position, 0, $separator);
} else {
$menu[$position] = $separator;
}
});
Определить, что вы пытаетесь сделать, немного сложно, но я думаю, что вы хотите добавить запись верхнего уровня в меню администратора WordPress.
Смотрите эту документацию в Кодексе WordPress.
Короче говоря, вы ищете использование add_menu_page()
функции, которая принимает ряд аргументов и отображает дополнительный пункт в административном меню в виде «Dashboard», «Posts», «Media» и т. Д.
Надеюсь, я понял это правильно. :-)
add_menu_page()
.
Ниже показано действие для Wordpress, которое запускается при отображении меню администратора. Меню администратора - это массив, и все, что вы здесь делаете, - это добавление элемента массива, который определяет разделитель, в указанной вами позиции.
От сюда :
add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
);
}
Обратите внимание, что, хотя это скорее напоминает принятый в настоящее время ответ, принятый в настоящее время ответ не работает для меня (и, судя по комментариям, для некоторых других).