cómo agregar solo un menú de administración de nivel superior sin crear un subnivel de menú

2

Aquí está el fragmento de código:

    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>';
}

El problema es que al agregar el submenú, el nombre del menú de nivel superior ("Sitio de viaje") se crea como un menú de subnivel. Ver imagen:

Básicamente,noquieroelsubmenú"Travel Site" en el menú principal "Travel Site", ¿cómo elimino el submenú "Travel Site"?

    
pregunta dave 24.10.2015 - 22:47

2 respuestas

1

Efectivamente, puede hacer esto agregando un elemento de subnivel con la misma barra de menú que el nivel superior, mientras cambia el título del elemento del submenú. Esto evita la apariencia de elementos de menú duplicados, a pesar de que el destino del nivel superior y el primer elemento del submenú son los mismos.

Debe tener al menos dos elementos de submenú, y uno será un destino duplicado como elemento de menú de nivel superior.

Por ejemplo:

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>';
}

Esto crearía el siguiente menú:

  • Sitio de viajes - > menú de sitio de viaje
    • Ver sitio de viajes - > travel-site-menu
    • Ver solicitudes de viaje - > ts-view-travel-request

Lafunciónts_admin_main_pagecrearealmentelapáginaqueseráeldestinode"Sitio de viajes" y "Ver sitio de viajes". Necesitará crear la función similar "ts_admin_vtr_page" que creará el destino de la subpágina para "Ver solicitudes de viaje".

    
respondido por el dbmpls 02.08.2018 - 21:41
3

No hay realmente una buena manera de hacer esto. Compruebe la función _wp_menu_output . Es donde se realiza todo el trabajo para la salida del menú. Vea el parámetro $submenu_as_parent y cómo se usa ? Establecer eso en falso produce el resultado que desea, pero no hay filtros para que realmente funcione. Hay un ticket abierto sobre el asunto, pero no se ha tomado ninguna acción durante más de un año. A falta de editar un archivo central (mala idea), no lo resolverá sin un búfer de salida y una solución muy frágil.

    
respondido por el chrisguitarguy 25.10.2015 - 02:00

Lea otras preguntas en las etiquetas