2014-12-26 3 views
0

Я хочу получить элементы своего основного меню wp. Я пробовал код, но все они возвращают только пустую страницу. Я не знаю, какой метод я должен использовать и не знаю, нужно ли включать какую-либо другую страницу на мою страницу?Как получить пункты меню в Wordpress?

И есть ли способ получить пункты меню из базы данных напрямую без использования методов и функций wp? Пока я не мог понять структуру таблицы wp. Поэтому я точно не знаю отношений между таблицами.

Спасибо.

+0

Вы имеете в виду получить их как массив или строку внутри функции или уметь добавлять поддержку навигационного меню в свою тему? – Marventus

+0

Хотите получить их как массив или строку да. – user2674354

ответ

0

Вы можете сделать это:

add_action('wp_nav_menu_menuname_items', 'user_nav_menu_items'); 
function user_nav_menu_items($items) { 
    /* do something with $items (string) */ 
    return $items; 
} 

Если вы хотите его как массив, просто взорвать его и взрывать его после того, как вы сделали:

add_action('wp_nav_menu_menuname_items', 'user_nav_menu_items'); 
function user_nav_menu_items($items) { 
    $items_r = explode("<li", $items); 
    /* do something with $items_r (array) */ 
    $items_new = implode("<li", $items_r); 
    return $items_new; 
} 

В обоих случаях, вы должны заменить menuname на крючок add_action для имени меню, в котором вы пытаетесь получить элементы.

5

Если вы знаете местонахождение меню идентификатор (обычно объявленный в functions.php на "register_nav_menus"), вы можете использовать этот фрагмент:

// GET ALL MENU OBJECTS AT SPECIFIED LOCATION 
function yourprefix_get_menu_items($location_id){ 
    //$locations = get_registered_nav_menus(); 
    $menus = wp_get_nav_menus(); 
    $menu_locations = get_nav_menu_locations(); 

    if (isset($menu_locations[ $location_id ]) && $menu_locations[ $location_id ]!=0) { 
     foreach ($menus as $menu) { 
      if ($menu->term_id == $menu_locations[ $location_id ]) { 
       $menu_items = wp_get_nav_menu_items($menu); 
       break; 
      } 
     } 
     return $menu_items; 
    } 
} 

или более короткую версию из Codex:

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

Затем сделайте все, что хотите, с таким массивом:

$menu_items = yourprefix_get_menu_items('sidebar-menu'); // replace sidebar-menu by desired location 

if(isset($menu_items)){ 
     foreach ((array) $menu_items as $key => $menu_item) { 
      ...some code... 
     } 
} 

И вот ссылка abou т все данные nav_menu которые можно выбрать непосредственно из базы данных по запросу MySQL: http://lasota.community.uaf.edu/2011/07/29/nav-menu-data-location-in-wordpress-3-2/

3
<?php 
$menu = 'menu-name/menu-id'; 
$args = array(
     'order'     => 'ASC', 
     'orderby'    => 'menu_order', 
     'post_type'    => 'nav_menu_item', 
     'post_status'   => 'publish', 
     'output'     => ARRAY_A, 
     'output_key'    => 'menu_order', 
     'nopaging'    => true, 
     'update_post_term_cache' => false); 
$items = wp_get_nav_menu_items($menu, $args); 
?> 
0

Использование get_registered_nav_menus() функции

<?php 

$menus = get_registered_nav_menus(); 

foreach ($menus as $location => $description) { 

    echo $location . ': ' . $description . '<br />'; 
} 
1

Вы можете попробовать это

$menu_name = 'sidebar-menu'; //menu slug 
$locations = get_nav_menu_locations(); 
$menu = wp_get_nav_menu_object($locations[ $menu_name ]); 
$menuitems = wp_get_nav_menu_items($menu->term_id, array('order' => 'DESC')); 

echo "<pre>"; 
print_r($menuitems); 
echo "</pre>"; 

вы получите ваше меню Объект

ref er: http://wiki.workassis.com/wordpress-get-menu-array/

Смежные вопросы