2012-03-14 29 views
6

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

$menus = wp_get_nav_menus(); 

Sé el ID del menú que desea utilizar. Basado en el ID del menú, me gustaría obtener las páginas que están en ese menú y la etiqueta de navegación correspondiente basada en un ID de menú seleccionado. ¿Cómo puedo hacer eso?

De hecho, me descubrí esto:

En ese ejemplo los $ options [ 'menu_choice'] es el ID de menú seleccionado, pero lo que realmente me gustaría es dar el valor enlace permanente. ¿Puedo obtener eso de esto?

¡Gracias por cualquier ayuda con anticipación!

+1

¿Sabía que hay un sitio de StackExchange dedicado a Wordpress? http://wordpress.stackexchange.com –

+0

marque esta respuesta http://stackoverflow.com/a/37959604/1153703 –

Respuesta

2

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

$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; 
} 
2

Desea mostrar un menú específico? ¿Por qué no utilizar 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); 
?> 
+0

$ menu_ID = '195'; $ menu_args = array ('menú' => $ menu_ID); wp_nav_menu ($ menu_args); –

7

Eso es exactamente lo que quiere.

$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 para todos los elementos del menú. Para que pueda recuperar los datos necesarios usando foreach loop.

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 información más interesante para esta pregunta, tales como opciones OrdenarPor, en el sitio oficial: http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items

1

Para obtener el ID del mensaje, entonces tendrá que tirar de él usando 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 utiliza para los menús. Lo mismo para la URL $, puede llamarlo usando get_permalink ($ id);

0
<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> 
Cuestiones relacionadas