add_submenu_page no funciona

15 jun 2014, 20:41:57
Vistas: 23.5K
Votos: 5

He creado un plugin que crea un menú personalizado de esta manera:

    add_menu_page( 'Precios Mayoristas', 'Mayorista', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call'); 

Ahora estoy intentando añadir un elemento de submenú debajo de este. He leído el codex y he llegado a esto:

add_submenu_page( 'woo-wholesale', 'Registros', 'Registros', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' ); 

Supongo que esto es incorrecto ya que el elemento del submenú no se está mostrando. ¿Alguien puede arrojar algo de luz sobre esto por favor?

1
Comentarios

¿solías usar otra clase para el archivo submenú? Inicialízala y defínela en el archivo principal.

huykon225 huykon225
21 feb 2017 18:13:45
Todas las respuestas a la pregunta 4
0
10

Asegúrate de que tu hook add_action esté configurado como admin_menu.

Aquí tienes un código de ejemplo:

add_action('admin_menu', 'wpse149688');
function wpse149688(){
    add_menu_page( 'Precios al por mayor', 'Al por mayor', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call');
    add_submenu_page( 'woo-wholesale', 'Registros', 'Registros', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' ); 
}

También verifica si el usuario con el que has iniciado sesión tiene la capacidad de ver este menú. Ya que este menú está configurado usando la capacidad manage_options.

15 jun 2014 20:50:43
1

Cometí el mismo error que el OP, ya que no es intuitivo cómo hacer que esto funcione. Al leer el codex sobre Menús de Administración, descubrí la respuesta.

El problema (para mí, de todos modos) fue editar el parámetro $parent_slug en la llamada a add_submenu_page(...).

Entonces, en el caso del OP, deberías cambiar:

add_submenu_page( 
    'woo-wholesale', 
    'Registrations', 
    'Registrations', 
    'manage_options', 
    'woo-wholesale-registrations', 
    'wwpr_page_call' 
);

por:

add_submenu_page( 
    'edit.php?post_type=woo-wholesale', 
    'Registrations', 
    'Registrations', 
    'manage_options', 
    'woo-wholesale-registrations', 
    'wwpr_page_call' 
);
28 abr 2016 16:29:05
Comentarios

Funcionó para mí. Esta debería ser la respuesta aceptada. Aunque el OP debería haber incluido su línea 'add_action' para que todos la viéramos, conseguir el atributo $parent_slug correcto parece ser el problema más evidente.

Kalnode Kalnode
12 ago 2018 02:58:12
0

Tu código es correcto. Sin embargo, hay algo que falta y que no es obvio en absoluto, y quien llegue a esta pregunta en el futuro debería leer esto:

Cuando una página de menú tiene 0 o 1 páginas de submenú, no se mostrarán submenús.

Una página de menú contiene una página por sí misma.

Una página de menú que contiene 1 página de submenú, aparecerá igual que si no tuviera una página de submenú. Esto se debe a que el elemento de menú de primer nivel y el primer elemento de menú de segundo nivel perteneciente a ese menú de primer nivel están destinados a mostrar la misma página.

En otras palabras, no puedes tener un solo elemento de submenú, porque eso no parece tener sentido para WordPress.

"¿Solo una página? ¡Entonces usa el elemento del menú directamente! No hay necesidad de un desplegable."

Ten en cuenta que cada vez que haces clic en un elemento del menú que se encuentra en la interfaz de administración y que tiene subelementos, cargará su primer subelemento. Por lo tanto, el elemento del menú y su primer subelemento son esencialmente lo mismo. Sin embargo, puedes renombrar el subelemento.

Algunos ejemplos de esto:

  • Escritorio = Inicio
  • Entradas = Todas las entradas
  • Apariencia = Temas
  • Herramientas = Herramientas disponibles

Entonces, en tu caso, hacer clic en Precios al por mayor cargaría Registros.

Cuando una página de menú contiene 2 o más páginas de submenú, las páginas de submenú se harán visibles. Eso es lo que la mayoría de nosotros no sabemos al principio.

Así que el truco es crear una página de submenú idéntica a la página del menú (puedes cambiar el $page_title y $menu_title si lo deseas) y luego tu página de submenú adicional:

add_menu_page( '', 'Elemento del menú', $capability, 'parent_slug', $callback );
add_submenu_page( 'parent_slug', 'Título de la página', 'Primer subelemento', $capability, 'parent_slug', $callback );
add_submenu_page( 'parent_slug', 'Segundo título de página', 'Segundo subelemento', $capability, 'submenu_slug', $submenu_callback );

Como puedes ver, el $page_title para add_menu_page incluso podría dejarse como una cadena vacía (pero no null), porque el título utilizado para la página será el $page_title del primer submenú. Pero recomiendo introducir la misma cadena para ambos para una mejor legibilidad.

Ahora apliquemos esto a tu código:

add_menu_page( 'Precios al por mayor', 'Al por mayor', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call');
add_submenu_page( 'woo-wholesale', 'Precios al por mayor', 'Precios', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call' );
add_submenu_page( 'woo-wholesale', 'Registros', 'Registros', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' );

Y tendrás la siguiente estructura de menú:

Al por mayor
-- Precios
-- Registros

Donde hacer clic en Al por mayor o Precios te llevará a la misma página.

4 ene 2024 13:18:42
0

Para mí, tenía las capacidades manage-options en lugar de manage_options. Eso solucionó el problema en mi caso.

29 ago 2023 17:03:42