Obtener valores de menú de WordPress

3 minutos de lectura

avatar de usuario
usuario1048676

Todo, estoy usando el siguiente código para obtener todos los menús de wordpress definidos que se crean:

$menus = wp_get_nav_menus();

Sé el ID del menú que quiero usar. Según la identificación del menú, me gustaría obtener las páginas que están en ese menú y la etiqueta de navegación correspondiente según la identificación del menú seleccionado. ¿Cómo puedo hacer eso?

De hecho descubrí esto:

$menu_items = wp_get_nav_menu_items($options['menu_choice']);

En ese ejemplo, las $opciones[‘menu_choice’] es el ID de menú seleccionado, pero lo que realmente me gustaría es dar el valor de enlace permanente. ¿Puedo sacar eso de esto?

¡Gracias por cualquier ayuda de antemano!

  • ¿Sabía que hay un sitio de StackExchange dedicado a WordPress? wordpress.stackexchange.com

    – julien_c

    15 de marzo de 2012 a las 10:17

  • verifique esta respuesta stackoverflow.com/a/37959604/1153703

    – Bikesh M

    22 de junio de 2016 a las 5:54

Eso es exactamente lo que quieres.

$menu_name="menu-id"; //e.g. primary-menu; $options['menu_choice'] in your case

if (($locations = get_nav_menu_locations()) && isset($locations[$menu_name])) {
    $menu = wp_get_nav_menu_object($locations[$menu_name]);
    $menu_items = wp_get_nav_menu_items($menu->term_id);
}

Ahora $menu_items es un objeto que contiene todos los datos de todos los elementos del menú. Para que pueda recuperar los datos necesarios usando foreach círculo.

foreach ($menu_items as $menu_item) {
    $id = $menu_item->ID;
    $title = $menu_item->title;
    $url = $menu_item->url;

    if ($parent_id = $menu_item->menu_item_parent) {
        //the element has a parent with id $parent_id, so you can build a hierarchically menu tree
    }
    else {
        //the element doesn't have a parent
    }
}

Puede encontrar más información interesante para esta pregunta, como las opciones de ordenación, en el sitio web oficial: http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items

Para acceder al título y la URL de cada elemento en un menú usando el wp_get_nav_menu_items() función:

$menu_items = wp_get_nav_menu_items( $options['menu_choice'] );
foreach ( (array) $menu_items as $key => $menu_item ) {
    $title = $menu_item->title;
    $url = $menu_item->url;
}

¿Quieres mostrar un menú específico? por qué no usar una función más simple, wp_nav_menu, y pasar un argumento de su ID de menú deseable? simplemente reemplace su menu_id con $menu_ID en el siguiente ejemplo:

<?php 
$menu_args = array('menu' => $menu_ID );
wp_nav_menu( $menu_args ); 
?> 

  • $menu_ID = ‘195’; $menu_args = array(‘menu’ => $menu_ID ); wp_nav_menu ($ menu_args);

    -Pramod Jain

    26 de mayo de 2017 a las 7:13

Para obtener el ID de la publicación, deberá extraerlo con esta función:

$id = get_post_meta( $menu_item->ID, ‘_menu_item_object_id’, true );

De lo contrario, la identificación será la publicación de tipo personalizado nav_menu que wordpress usa para los menús. Lo mismo ocurre con $url, puede llamarlo usando get_permalink($id);

<pre> 
$menu_ID = '195'; // 195 is a menu id this id you can see 
http://example.com/wp-admin/nav-menus.php?action=edit&menu=195
$menu_args = array('menu' => $menu_ID );
wp_nav_menu( $menu_args );  
</pre>

¿Ha sido útil esta solución?