すべてのnavリンクがcurrent-menu-item になってしまう
-
カスタム投稿(アーカイヴ含む)のディレクトリ表示中にグローバルナビゲーションのリンクをcurrent-menu-item にしたいのですが、下記のコードをfunctions.php に追加したところ、カスタム投稿含む固定ページもすべてがcurrent-menu-item になってしまいます。
どこがいけないのでしょうか?
– 使用テーマ: BusinessPress
– カスタム投稿タイプ: news, infofunction 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ヶ月前に変更しました。
-
このトピックは
-
こんにちは。
if ( get_post_type() == “news” || “info” )
ここだと思います。
“info” は常に true になるので、このif文は必ず通ってしまう事になります。
この前の行でis_post_type_archive
によるチェックを入れているので、この行自体いらないように思います。また正しく作られたテーマであれば、カスタム投稿の詳細ページまたはアーカイブページをナビゲーションに追加し、そのページを開いた時に、どちらにも
current-menu-item
がつくはずです。- メニュークラスを書き換える処理を既に追加していないか
- プラグインを全て停止してみる
- Twenty Twenty One などに切り替えてみる
などを試してみて下さい。
@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年、 6ヶ月前に
k.kuriharaが編集しました。
-
この返信は2年、 6ヶ月前に
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
を付与する結果になっていると思います。
どの$item
がnews
もしくはinfo
ページへのリンクかを判定するコードが必要に思います。ですがまず、Aki Hamano さんがおっしゃっている3点を試してみてはどうでしょうか。
- トピック「すべてのnavリンクがcurrent-menu-item になってしまう」には新たに返信することはできません。