0

私はWordpressを初めて使用します。私のバージョンはWP3.4.2です。サイトは私のローカルホストにあります。申し訳ありませんが共有できません。

現在の投稿に基づいてナビゲーションメニュー項目を動的に強調表示するにはどうすればよいですか?この質問はStackOverflowにかなり表示されますが、受け入れられる回答は見つかりませんでした。ここで見た回答の中にはJavascriptを使用しているものもありますが、訪問者の20%がjsを持っていないため使用できません。

私はフィルターフックを使用して解決策を見つけました(私にとっては新しい概念です)。以下のheader.phpにfilter_hookを追加しました。

このフックは正しい投稿で起動しますが、最終的な結果は間違っています。メニューの1つの項目にクラス名「current-menu-item」を追加する代わりに、メニュー全体は次の文字列になります。「current-menu-item」;

誰かが私が間違ったことを理解するのを手伝ってくれませんか?

if(($post->post_type) =="communities")
    add_filter('wp_nav_menu' , 'special_nav_class' , 10 , 2);

function special_nav_class( $item){

     if(true){
             $class = "current-menu-item";
     }
     return $class;
}
4

2 に答える 2

6

WordPressの埋め込みメニュー機能を使用する場合(そして間違いなくそうする必要があります)、WordPresscurrent-menu-itemは現在のアイテムにクラスを自動的に追加し、現在のアイテムがドロップダウンメニューにある場合はcurrent-menu-parentメインにクラスを追加します。LI

次に、CSSルールをこれらのクラスに適用するだけです。

于 2013-01-07T18:18:03.663 に答える
1

WordPress Tracのnav-menu-template.phpの237行目である「wp_nav_menu」の場合、問題のフィルターのソースコードを確認することから始めたいと思います。

コードを確認すると、フィルターによって$nav_menu変数を変更できることがわかります。したがって、このフィルターから返されるものはすべて、文字通りhtmlになります。CSSクラスを変更したい場合は、代わりに「nav_menu_css_class」フィルターを使用することをお勧めします。このフィルターを使用すると、割り当てられたクラスを確認して、指定したクラスのみを使用したり、クラスを追加したりするために、とにかくそれらをオーバーライドできます。

if ( $post->post_type == "communities" ) {
    add_filter( 'nav_menu_css_class', 'special_nav_class', 10 , 3 );
}

function special_nav_class( $classes, $item, $args ){
    if ( true ) {
        $classes[] = "current-menu-item";
    }
    return $classes;
}

ifステートメントをspecial_nav_class関数に移動するために、これをもう少し試してみることをお勧めします。post_typeは、フィルターから受け取った$item変数から決定できると思います。しかし、私はそれについて100%ではありません。

于 2013-01-07T18:12:40.053 に答える