サポート » テーマ » すべてのnavリンクがcurrent-menu-item になってしまう

  • k.kurihara

    (@kenkurihara)


    カスタム投稿(アーカイヴ含む)のディレクトリ表示中にグローバルナビゲーションのリンクをcurrent-menu-item にしたいのですが、下記のコードをfunctions.php に追加したところ、カスタム投稿含む固定ページもすべてがcurrent-menu-item になってしまいます。

    どこがいけないのでしょうか?

    – 使用テーマ: BusinessPress
    – カスタム投稿タイプ: news, info

    function make_menu_current( $classes, $item ) {
    
     if ( is_post_type_archive('news')  ||  is_post_type_archive('info')  )
    	if ( get_post_type() == "news" || "info" )
    	 	{
    	 		$classes[] = esc_attr( 'current-menu-item' );
    		 }
    		$classes = array_unique( $classes );
    
        return $classes;
    }
    add_filter( 'nav_menu_css_class', 'make_menu_current', 10, 2 );
    • このトピックはk.kuriharaが2週、 6日前に変更しました。
    • このトピックはk.kuriharaが2週、 6日前に変更しました。
    • このトピックはk.kuriharaが2週、 6日前に変更しました。
    • このトピックはk.kuriharaが2週、 6日前に変更しました。
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは。

    if ( get_post_type() == “news” || “info” )

    ここだと思います。
    “info” は常に true になるので、このif文は必ず通ってしまう事になります。
    この前の行で is_post_type_archive によるチェックを入れているので、この行自体いらないように思います。

    また正しく作られたテーマであれば、カスタム投稿の詳細ページまたはアーカイブページをナビゲーションに追加し、そのページを開いた時に、どちらにも current-menu-item がつくはずです。

    • メニュークラスを書き換える処理を既に追加していないか
    • プラグインを全て停止してみる
    • Twenty Twenty One などに切り替えてみる

    などを試してみて下さい。

    トピック投稿者 k.kurihara

    (@kenkurihara)

    @wildworks ありがとうございます。

    以下、ご指摘があった点さっそくためしてみました。

    if ( get_post_type() == “news” || “info” )

    こちらの行をコメントアウトして実行したのですが、
    以下のようになりました。

    1)上記2種のカスタム投稿タイプ以外の固定ページのnavメニュー配下では、当該固定ページのみがcurrent-menu-itemになる(意図した挙動)
    2)上記2種のカスタム投稿タイプのnavメニュー配下では、当該カスタム投稿タイプおよび固定ページのすべてがcurrent-menu-itemになってしまう(意図していない挙動)

    また、コメントいただいた以下の個所が理解できませんでした。

    “info” は常に true になるので、このif文は必ず通ってしまう事になります。

    当該ページの投稿タイプが「news」もしくは「info」のみ、処理を行いたいので「info」がtrueで問題ないと考えたのですが、ちがっておりますでしょうか?

    コメントありがとうございます。
    他の点も試してみたいと思います。

    • この返信は2週、 5日前にk.kuriharaが編集しました。
    • この返信は2週、 5日前にk.kuriharaが編集しました。

    こんにちは

    if ( get_post_type() == "news" || "info" )

    if ( get_post_type() == "news" || get_post_type() == "info" )
    と書く必要があります。
    文字列の"info"は常にtrueですので、||の右側は常にtrueとなり、このif文は全体として常にtrueになります。

    ところで、get_post_type()は現在表示している投稿の投稿タイプを取得する関数です。
    アーカイブページのループ前に使うと、最初の投稿の投稿タイプが取得されると思います。
    つまり、newsのアーカイブページでは、get_post_type() == "news"は常にtrueじゃないでしょうか。

    なので、コード上は全てのメニューアイテムにcurrent-menu-itemを付与する結果になっていると思います。
    どの$itemnewsもしくはinfoページへのリンクかを判定するコードが必要に思います。

    ですがまず、Aki Hamano さんがおっしゃっている3点を試してみてはどうでしょうか。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。