it-roy-ru.com

Сделайте пункты подменю главной ссылкой в ​​меню администратора, используя functions.php

Я пытаюсь настроить область администратора с помощью файла functions.php, чтобы облегчить работу моих клиентов. Одна просьба, которую я получил раньше и надеюсь выполнить, - это перенести некоторые подменю в главное меню.

Например, я бы хотел, чтобы виджеты и меню появлялись в главном меню навигации, а не были подменю "Внешний вид". Затем я бы все вместе убрал вкладку "Видимости".

Я смог удалить вкладку, но не смог создать новые кнопки для виджетов и меню. Даже если я могу получить помощь не в техническом их перемещении, а в создании новой кнопки и установке ссылки самостоятельно (например, для Меню -> /nav-menus.php).

Возможно ли что-нибудь из этого?

Спасибо

3
Adam

Хорошо, это немного грязно, но это работает. Взглянуть

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-адрес значка. Единственная часть, которую я не могу получить так, как я хочу, - это позиционирование.

3
Norcross

Это даже проще, если, как и в OP, вы хотите переместить меню и виджеты из внешнего вида на верхний уровень. Это то, что мне тоже нужно.

Поскольку мы просто перемещаем основные пункты меню WP, нам не нужно использовать add_menu_page для добавления пунктов меню обратно - мы не добавляем никаких новых пунктов меню. Просто удалите их из массива $ submenu и переустановите в другом месте массива $ menu.

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 article , я так и не получил ее работать ,.

0
nimmolo

Хорошая статья об этом, старая ссылка, которая может помочь с этим, http://wpengineer.com/475/top-level-menu-in-wordpress-27/

Кроме того, решение, которое предлагает @Norcross, прекрасно работает, но значок 99 выдаст ошибку, вы можете оставить ее пустой, например. '' вместо 99. Вы также можете иметь свой собственный значок, используя basename(__FILE__) и имя файла.

0
Drew Dello Stritto

Что касается 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' );
0
jmarceli

Вы можете изменить порядок, используя фильтр 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 был добавлен в меню верхнего уровня. Чтобы изменить положение каждого пункта меню, просто измените их расположение.

0
Steven