5

我正在做一个 Wordpress 设计,我想创建一个自定义菜单。

$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 创建的。

任何想法如何添加这个类?

4

3 回答 3

21

解决时间:

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;
}
于 2016-01-28T15:39:20.847 回答
17

您可以对当前页面/猫等 ID 与菜单项 object_id 进行比较,该 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>';
    }

}
于 2012-04-05T01:49:07.780 回答
3

使用功能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>';
   }
}
于 2018-06-21T22:47:45.963 回答