Сделайте пункты подменю главной ссылкой в меню администратора с помощью fuctions.php
Я пытаюсь настроить административную область с помощью functions.php файл, чтобы облегчить жизнь моим клиентам. Одна просьба, которую я получил раньше и надеюсь выполнить, состоит в том, чтобы переместить некоторые подменю в основную навигацию.
Например, я хотел бы, чтобы виджеты и меню отображались в основной навигации, а не были подменю для внешнего вида. Затем я бы в конечном итоге удалил вкладку "Внешний вид" все вместе.
Я смог удалите вкладку, но не сможете создать новые кнопки для виджетов и меню. Даже если я смогу получить помощь, не перемещая их технически, а вместо этого создав новую кнопку и установив ссылку самостоятельно (например, для меню ->/nav-menus.php).
Возможно ли что-нибудь из этого?
Спасибо
6 answers
Хорошо, это немного запутанно, но это работает. Взгляните
function remove_submenus() {
global $submenu;
unset($submenu['themes.php'][10]); // Removes Menu
}
add_action('admin_menu', 'remove_submenus');
function new_nav_menu () {
global $menu;
$menu[99] = array('', 'read', 'separator', '', 'menu-top menu-nav');
add_menu_page(__('Nav Menus', 'mav-menus'), __('Nav Menus', 'nav-menus'), 'edit_themes', 'nav-menus.php', '', 99);
}
add_action('admin_menu', 'new_nav_menu');
По сути, это удаление настроек навигационного меню из под-панели "Внешний вид", а затем повторное добавление его в качестве страницы верхнего уровня (аналогично плагину). Вы также можете установить URL-адрес значка там. Единственная часть, которую я не могу заставить работать так, как я хочу, - это позиционирование.
Что касается Wordpress 4.4, я должен использовать следующий код, чтобы заставить его работать:
function adjust_admin_menu() {
global $menu;
remove_submenu_page( 'themes.php', 'nav-menus.php' );
// Add nav menu as top element
$menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_theme_options', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');
}
add_action( 'admin_menu', 'adjust_admin_menu' );
Вы можете изменить порядок с помощью фильтра menu_order:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array(
'index.php', // Dashboard
'edit.php', // Posts
'upload.php', // Media
'edit.php?post_type=page', // Pages
'edit-comments.php', // Comments
'link-manager.php', // Links
'separator1', // First separator
'nav-menus.php', // Navigation
'separator2', // Second separator
'themes.php', // Appearance
'plugins.php', // Plugins
'users.php', // Users
'tools.php', // Tools
'options-general.php', // Settings
'separator-last', // Last separator
);
}
add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
add_filter('menu_order', 'custom_menu_order');
Это было взято из этой статьи здесь: настройка вашего администратора wordpress
Обратите внимание, что nav-menu.php был добавлен в меню верхнего уровня. Чтобы изменить положение каждого пункта меню, просто переставьте их.
Хорошая статья об этом, старая ссылка, которая может помочь в этом, http://wpengineer.com/475/top-level-menu-in-wordpress-27/
Кроме того, решение, которое предлагает @Norcross, отлично работает, но значок 99 выдаст ошибку, вы можете оставить его пустым, например ''
вместо 99. Вы также можете создать свой собственный значок, используя basename(__FILE__)
и имя файла.
Еще проще, если, как и в OP, вы хотите только переместить меню и виджеты из внешнего вида на верхний уровень. Это то, что мне тоже было нужно.
Поскольку мы просто перемещаем основные пункты меню WP, нам не нужно использовать add_menu_page
для добавления пунктов меню обратно - мы не добавляем никаких новых пунктов меню. Просто удалите их из массива $подменю и повторно установите в другом месте массива $меню.
function re_sort_menu() {
global $menu;
global $submenu;
// Note: find the position of every submenu in Appearance by uncommenting the following:
// print_r($submenu['themes.php'];
unset($submenu['themes.php'][10]); // Unsets Appearance -> Menu (position 10)
unset($submenu['themes.php'][7]); // Unsets Appearance -> Widgets
// Add Menu and Widgets back at top level with some dashicons
// Be careful not to give menu positions (array keys) that conflict with other menu items
// TIP: print_r($menu); to see existing menu positions and also to check out the proper order of these array values. WP docu seems to list them in the incorrect order.
$menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_themes', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');
$menu[32] = array( __( 'Widgets', 'theme-slug' ), 'edit_themes', 'widgets.php', __( 'Widgets', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-admin-generic');
}
add_action( 'admin_menu', 're_sort_menu' );
Ответ Норкросса выше навел меня на правильный путь, но по какой-то причине, используя add_menu_item
не восстановил рабочий раздел "Навигационное меню" в качестве пункта меню верхнего уровня в админке для меня в WP 4.1. Проблема, похоже, заключалась в порядке значений массива, переданных этой функции, но независимо от того, как я переупорядочил вещи, работая сразу с новой статьей WP Developer API, я так и не смог заставить ее работать.
add_action( 'admin_menu', 'dashboard_remove_menu_pages' );
function dashboard_remove_menu_pages() {
remove_submenu_page( 'themes.php', 'nav-menus.php' );
add_menu_page('Menu', 'Menu', 'edit_themes', 'nav-menus.php', '' , 'dashicons-menu', 3);
}
Это должно сработать. также и с позиционированием. в этом случае позиция меню: 3. просто придерживайтесь структуры wordpress:
add_menu_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = '', string $icon_url = '', int $position = null )