在我的主导航中,我希望每个顶级页面都有一个子页面列表。因此,我创建了将菜单项动态添加到主导航的代码。这只适用于子页面的第一级。您可以看到,我注释掉了进入第二级的代码,因为它在主级上输出了这些链接。我不知道为什么它在第二层上不起作用。难道我们不能将菜单项分配给动态生成的父菜单项?
它看起来像:
add_filter( \'wp_nav_menu_objects\', \'epc_wp_nav_menu_items\', 10, 2 );
function epc_wp_nav_menu_items($items, $args) {
if ($args->theme_location == \'primary\') {
$menu_order = 10000;
$menu_order2 = 20000;
global $wpdb;
global $post;
$post_id = 0;
if($post){
$post_id = $post->ID;
}
foreach($items as $item){
$pageChildren = $wpdb->get_results("SELECT post_title, ID FROM wp_posts WHERE post_parent = ".$item->object_id." AND post_status = \'publish\' AND post_type=\'page\' ORDER BY menu_order", \'OBJECT\' );
foreach($pageChildren as $child){
$menu_order++;
$new_item = epc_add_menu_item($post_id, $menu_order, $item, $child);
$items[] = (object)$new_item;
/*
$pageChildrenSecondLevel = $wpdb->get_results("SELECT post_title, ID FROM wp_posts WHERE post_parent = ".$child->ID." AND post_status = \'publish\' AND post_type=\'page\' ORDER BY menu_order", \'OBJECT\' );
foreach($pageChildrenSecondLevel as $child2){
$menu_order2++;
$new_item2 = epc_add_menu_item($post_id, $menu_order2, $new_item, $child2);
$items[] = (object)$new_item2;
}
*/
}
}
}
return $items;
}
function epc_add_menu_item($post_id, $menu_order, $item, $child){
$new_item = new stdClass;
$new_item->ID = $menu_order;
$new_item->menu_item_parent = $item->ID;
$new_item->url = get_permalink( $child->ID );
$new_item->title = $child->post_title;
$new_item->menu_order = $menu_order;
$new_item->object_id = $child->ID;
$new_item->post_parent = $item->object_id;
$classes = \'menu-item\';
$classes .= \' menu-item-parent-\' . $item->ID;
$classes .= \' menu-item-type-post_type\';
$classes .= \' menu-item-object-page\';
if($post_id == $child->ID){
$classes .= \' current-menu-item\';
$classes .= \' page-item\';
$classes .= \' page-item-\' . $child->ID ;
$classes .= \' current_page_item\';
}
$new_item->classes = $classes;
return $new_item;
}