¿Cómo configurar manualmente un submenú de administración personalizado seleccionado?

3 minutos de lectura

avatar de usuario
musa haidari

Estoy desarrollando mi primer complemento de WordPress. Digamos que tiene las siguientes páginas de administración:

  • Configuración general
  • Agregar nuevo proveedor
  • Vendedores
  • Editar proveedor

De la que no quiero mostrar la Editar proveedor en el menú y desea que sea accesible mediante un enlace en Vendedores página. Mi menú y Vendedores página son:
ingrese la descripción de la imagen aquí

Código para generar el menú:

function nes_general_settings_view () { 
    require_once("views/admin/general_settings.php");
}

function nes_vendor_view () { 
    require_once("views/admin/vendor.php");
}

function nes_vendor_new_view () {
    require_once("views/admin/vendor_new.php");
}

function nes_vendor_edit_view () {

    require_once("views/admin/vendor_edit.php");
}

add_action("admin_menu", function () {
    add_menu_page(
        "Service",  
        "Service",  
        "manage_options",            
        "nes_general_settings",      
        "nes_general_settings_view", 
        null,                        
        4                            
    );

    add_submenu_page( "nes_general_settings", "General Settings", "General Settings", 0, "nes_general_settings", "nes_general_settings_view");      
    add_submenu_page( "nes_general_settings", "Vendors", "Vendors", 0, "nes_vendor", "nes_vendor_view");
    add_submenu_page( "nes_general_settings", "New Vendor", "New Vendor", 0, "nes_vendor_new", "nes_vendor_new_view");
    add_submenu_page( "nes_fake_id", "Edit Vendor", "Edit Vendor", 0, "nes_vendor_edit", "nes_vendor_edit_view");       
});

Y Código para generar el enlace a Editar proveedor página:

<a href="https://stackoverflow.com/questions/23468919/<?=admin_url("admin.php?page=nes_vendor_edit")?>">Edit</a>

Pero cuando estoy en Editar proveedor página, mi menú no está seleccionado.
ingrese la descripción de la imagen aquí

Cómo establecer Servicio > Proveedores submenú seleccionado, cuando estoy en Editar proveedor?

En el caso de que sus submenús sean tipos de publicaciones personalizadas, puede definirlos fácilmente como elementos de submenú de un menú personalizado configurando el parámetro de tipo de publicación personalizada de “show_in_menu” como el slug que definió al crear su personalizado. -tipo de mensaje. Si lo hace de esta manera, se mantendrá el menú predeterminado abierto/cerrado y se resaltará el elemento del submenú actual en el menú de administración.

Por ejemplo:

/* ————————————————————————— */
/* Content Types Menu Item
/* ————————————————————————— */

add_menu_page(
    'Content Types',
    'Content Types',
    'manage_options',
    'custom-content', // menu slug
    'ds_create_new_submenu',
    'dashicons-editor-table',
    null
);

Y luego, en sus argumentos de tipo de publicación personalizados, defina show_in_menu para que coincida con el slug del menú.

$args = array(
    'labels'                => $labels,
    'menu_icon'             => 'dashicons-format-status',
    'capability_type'       => 'manage_options',
    'show_in_menu'          => 'custom-content'
);

Ejemplos de código abreviados por simplicidad

avatar de usuario
brasofilo

Esto tiene que hacerse con jQuery para añadir las clases adecuadas al menú de administración.

¿Cómo configurar manualmente un submenú de administración personalizado seleccionado?

Use lo siguiente para imprimir el script:

# Grab the slug to print only in this screen
$hook = add_submenu_page( 
    null, # better than fake id
    "Edit Vendor", 
    "Edit Vendor", 
    'manage_options', # IMPORTANT, don't use levels (0-9), they're deprecated
    "nes_vendor_edit", 
    function() {
        echo '<h1>nes_vendor_edit_view</h1>';
    }
);

add_action( "admin_footer-$hook", function()
{
    # http://stackoverflow.com/questions/5673269/what-is-the-advantage-of-using-heredoc-in-php
    echo <<<HTML
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#toplevel_page_nes_general_settings')
                .addClass('current wp-has-current-submenu wp-menu-open');
        });     
        </script>
HTML;
});

¿Cómo configurar manualmente un submenú de administración personalizado seleccionado?

  • Gran respuesta. Solo queria mencionar para que los “Proveedores” tambien seleccionados, agregué la clase current a su li etiqueta.

    – Musa Haidari

    10 de mayo de 2014 a las 7:34

  • establezca $plugin_page global en su submenú slug en el filtro ‘parent_file’

    – tutankamón

    4 de marzo de 2015 a las 13:54

  • También puede agregar la clase “actual” a la etiqueta “a” dentro de la etiqueta “li”: $(‘#toplevel_page_nes_general_settings a’) … De lo contrario, cuando pasamos el mouse, cambia el ícono, al menos cuando lo probé, yo necesitaba hacer esto.

    – Nicolás

    7 oct 2017 a las 13:05


¿Ha sido útil esta solución?