¿Shortcode para insertar menú en el cuerpo de la página?

1 feb 2018, 20:18:13
Vistas: 45.6K
Votos: 4

Necesito insertar un menú en el texto de una página. Encontré estos dos plugins pero ninguno funciona. Ambos no han sido actualizados durante 6 años:

https://wordpress.org/plugins/custom-menu/

https://wordpress.org/plugins/custom-menu-shortcode/

Encontré este código para crear mi propio shortcode

function print_menu_shortcode($atts, $content = null) {
extract(shortcode_atts(array( 'name' => null, 'class' => null ), $atts));
return wp_nav_menu( array( 'menu' => $name, 'menu_class' => $class, 'echo' => false ) );
}

add_shortcode('menu', 'print_menu_shortcode');

Y entonces el shortcode debería ser:

[menu name="-nombre de tu menú-" class="-tu clase-"]

Funciona pero la clase no se imprime en absoluto. ¿Qué está mal en la función? Necesito imprimir la clase.

2
Comentarios

No, WordPress no hace eso por sí mismo. Sí, puedes crear una función para hacerlo.

janh janh
1 feb 2018 21:53:26

Acabo de editar mi pregunta para insertar un código

JPashs JPashs
2 feb 2018 10:07:43
Todas las respuestas a la pregunta 2
0
12

Ese código debería funcionar. ¿Estás usando "myclass" como la clase y no ".myclass"?

¿Es esto para un uso específico donde la clase siempre será la misma? Si solo planeas usar esto en un lugar, puedes hacer esto:

    function print_menu_shortcode($atts, $content = null) {
extract(shortcode_atts(array( 'name' => null, 'class' => null ), $atts));
return wp_nav_menu( array( 'menu' => $name, 'menu_class' => 'myclass', 'echo' => false ) );
}

add_shortcode('menu', 'print_menu_shortcode');

Luego cambia la sección 'menu_class' => 'myclass' con la clase que necesites. Esto evitará tener que usar la clase. Nuevamente, no uses el "." delante de la clase aquí.

Uso del shortcode:

[menu name="nombre_del_menu"]
2 feb 2018 20:47:27
0

Sé que llego años tarde, pero por si alguien se encuentra con esto nuevamente, puedes usar este código para incluir una clase con tu shortcode y su valor de retorno. Lo modifiqué con las respuestas correspondientes anteriores que había aquí.

function print_menu_shortcode($atts=[], $content = null) {
    $shortcode_atts = shortcode_atts([ 'name' => '', 'class' => '' ], $atts);
    $name   = $shortcode_atts['name'];
    $class  = $shortcode_atts['class'];
    return wp_nav_menu( array( 'menu' => $name, 'menu_class' => $class, 'echo' => false ) );
}

Shortcode: [menu name="nombre_del_menu" class="tu_clase"]

¡Espero que esto ayude a cualquiera que lo pueda necesitar en el futuro!

15 jun 2021 09:24:05