我想获取我的wp主菜单中的项目。我尝试了一些代码,但它们都只返回空白页面。我不知道我必须使用哪种方法,也不知道是否需要将任何其他页面包含到我的页面中?
此外,是否有直接从数据库获取菜单项而不使用wp方法和函数的方法?目前我无法理解wp的表结构。因此,我不确定表之间的关系。
谢谢。
此外,是否有直接从数据库获取菜单项而不使用wp方法和函数的方法?目前我无法理解wp的表结构。因此,我不确定表之间的关系。
谢谢。
$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>";
// 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...
}
}
以下是关于从数据库中直接通过MySQL请求选择的所有nav_menu数据的链接: http://lasota.community.uaf.edu/2011/07/29/nav-menu-data-location-in-wordpress-3-2/
这个链接提供了有关WordPress 3.2中nav_menu数据的详细信息。您可以使用MySQL查询直接从数据库中选择它们。请注意保留html标记。<?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 );
?>
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
替换为您要获取其项目的菜单名称。使用get_registered_nav_menus()函数
<?php
$menus = get_registered_nav_menus();
foreach ( $menus as $location => $description ) {
echo $location . ': ' . $description . '<br />';
}