web-dev-qa-db-ja.com

Functions.phpでwalkerを使ってカスタム分類法に 'active'クラスを追加する

カテゴリ(実際にはカスタム分類法)を含むメニューを表示するために、functions.phpで次のコードを使用します。現在のページにいるときにアクティブに表示させたいだけです。何がおかしいのですか?

また、$category = get_category($mycatid);行が$category変数に入力されていないこともわかります。

<?php
class walker_archives extends Walker_Nav_Menu
{
    public function start_el( &$output, $item, $depth, $args )
    {
        $attributes  = '';

        ! empty ( $item->attr_title )
            and $item->attr_title !== $item->title
            and $attributes .= ' title="' . esc_attr( $item->attr_title ) .'"';

        ! empty ( $item->url )
            and $attributes .= 'href="' . esc_attr( $item->url ) .'"';

        $attributes  = trim( $attributes );
        $title       = apply_filters( 'the_title', $item->title, $item->ID );
        $item_output = "$args->before<a $attributes>$args->link_before$title</a>"
                        . "$args->link_after$args->after";

        $mycatid = $item->object_id;
        $category = get_category($mycatid);
        $mycatslug = $category->slug;
        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $class_names .= in_array("current_page_item",$item->classes) ? ' active' : '';
        $class_names = ' class="staysexy'. esc_attr( $class_names );
        $output .= $indent . '
                    <li id="nav-menu-item-'. $item->ID . '" class="genre-'. $mycatslug . '">';
        $output .= apply_filters(
            'walker_nav_menu_start_el'
            ,   $item_output
            ,   $item
            ,   $depth
            ,   $args
        );
    }
    public function start_lvl( &$output )
    {
        $output .= '<ul class="sub-menu">';
    }
    public function end_lvl( &$output )
    {
        $output .= '</ul>';
    }
    function end_el( &$output )
    {
        $output .= '</li>';
    }
}?>
2
Gab

current_page_itemcurrent-menu-itemに変更すると、これらは分類法でありページではないため、問題は解決しました。

current_page_itemとcurrent-menu-itemの違いはなんですか?

1
Gab