как добавить только меню администратора верхнего уровня без создания меню подуровня


Вот фрагмент кода:

    add_action( 'admin_menu', 'travel_site' );

function travel_site(){
    add_menu_page( 'Travel Site Menu', 'Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page' );
    add_submenu_page("travel-site-menu","View Travel Requests","View Travel Requests","manage_options","ts-view-travel-requests","ts_admin_vtr_page");
}

function ts_admin_main_page(){
    echo '<div class="wrap">';
    echo    '<p>Testing main travel site menu page</p>';
    echo '</div>';
}

function ts_admin_vtr_page(){
    echo '<div class="wrap">';
    echo    '<p>Testing view travel requests</p>';
    echo '</div>';
}

Проблема в том, что при добавлении подменю название меню верхнего уровня ("Сайт путешествий") создается само по себе как меню подуровня. См. изображение: enter image description here

В принципе, мне не нужно подменю "Сайт путешествий" в главном меню "Сайт путешествий", как удалить подменю "Сайт путешествий"?

Author: dave, 2015-10-24

2 answers

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

У вас должно быть по крайней мере два пункта подменю, и один из них будет дублировать пункт назначения в качестве пункта меню верхнего уровня.

Например:

add_action( 'admin_menu', 'add_travel_menu' );
function add_travel_menu() {
        add_menu_page('Travel Site Menu', 'Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page');
        add_submenu_page('travel-site-menu', 'Travel Site', 'View Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page');
        add_submenu_page('travel-site-menu', 'View Travel Requests', 'View Travel Requests', 'manage_options', 'ts-view-travel-requests', 'ts_admin_main_page');
}
function ts_admin_main_page() {
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
    }
    echo '<div class="wrap">';
    echo '<p>Here is where the form would go if I actually had options.</p>';
    echo '</div>';
}

Это создало бы следующее Меню:

  • Сайт путешествий ->сайт путешествий-меню
    • Просмотр сайта путешествий ->меню сайта путешествий
    • Просмотр запросов на поездки ->ts-просмотр запросов на поездки

enter image description here

Функция ts_admin_main_page фактически создает страницу, которая будет местом назначения для "Сайта путешествий" и "Просмотра сайта путешествий". Вам нужно будет создать аналогичную функцию "ts_admin_vtr_page", которая создаст подстраницу назначения для "Просмотр путешествий Просьбы".

 1
Author: dbmpls, 2018-08-02 19:41:54

На самом деле нет хорошего способа сделать это. Оформить заказ на _wp_menu_output функция. Именно здесь выполняется вся работа по выводу меню. Видите этот параметр $submenu_as_parent и , как он используется ? Установка значения false приводит к желаемому результату, но на самом деле нет фильтров, которые могли бы заставить это работать. Существует открытый билет по этому вопросу, но на самом деле никаких действий не предпринималось более года. За исключением редактирования основного файла (плохая идея), вы не решите эту проблему без некоторых буферизация вывода и очень хрупкое решение.

 3
Author: chrisguitarguy, 2015-10-25 01:00:20