Сделайте пункты подменю главной ссылкой в меню администратора с помощью fuctions.php


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

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

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

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

Спасибо

Author: Adam, 2011-02-13

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

 3
Author: Norcross, 2011-02-15 08:26:24

Что касается 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' );
 1
Author: jmarceli, 2016-01-15 11:45:35

Вы можете изменить порядок с помощью фильтра 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
Author: Steven, 2012-05-24 03:02:38

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

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

 0
Author: Drew Dello Stritto, 2012-11-02 20:57:59

Еще проще, если, как и в 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, я так и не смог заставить ее работать.

 0
Author: nimmolo, 2015-01-27 09:59:50
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 )
 -1
Author: NS frontend-gmbh.de, 2016-07-25 15:02:02