5

私は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 が作成する "current-page" クラスが標準メニューに必要なことです。

このクラスを追加する方法はありますか?

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 を、リンク先のページ/カテゴリなどの ID であるメニュー項目 object_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 に答える