我正在开发Wordpress-Design,我想创建一个自定义菜单。
$items = wp_get_nav_menu_items('Menu', 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));
echo '<pre>'; print_r($items); echo '</pre>';
foreach($items as $item){
echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>';
}
问题是,我需要在标准菜单中创建“当前页面”类,即WordPress创建。
任何想法如何添加这个类?
答案 0 :(得分:13)
您可以对当前页面/猫等ID与菜单项object_id进行比较,该对象是其链接到的页面/类别等的ID。
像(未经测试);
global $post;
$thePostID = $post->ID;
foreach($items as $item){
if($thePostID === $item->object_id) {
echo '<div class="menu_entry"><a href="'.$item->url.'" class="current-menu-item">'.$item->title.'</a></div>';
}else{
echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>';
}
}
答案 1 :(得分:13)
解决方案时间:
添加这些类的WordPress函数是_wp_menu_item_classes_by_context()
。当您使用wp_nav_menu
但不使用wp_get_nav_menu_items
时,系统会调用此功能。幸运的是,后者提供了一个过滤器,所以我们可以自己做:
add_filter( 'wp_get_nav_menu_items', 'prefix_nav_menu_classes', 10, 3 );
function prefix_nav_menu_classes($items, $menu, $args) {
_wp_menu_item_classes_by_context($items);
return $items;
}
答案 2 :(得分:1)
使用功能get_queried_object_id()
。在所有页面(包括“博客”页面)上都可以正常工作。
查看示例:
if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
foreach ( $menu_items as $menu_item ) {
$current = ( $menu_item->object_id == get_queried_object_id() ) ? 'current' : '';
echo '<li class="' . $current . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}
}