ホームページ制作アトリエ

心えがおホームページ制作 atelier(アトリエ)は、ホームページ・動画制作、教育ICT・アプリ開発、名刺・ポスター・チラシの作成を行っております。

カスタムタクソノミ―のアーカイブ選択時にナビメニューの各リストに付くclass属性をフィルタリング

カテゴリー:未分類

現状の問題

カスタム投稿を設置し、2つのタクソノミ―を作りました。 カスタム投稿タイプのアーカイブページをメニューのリストに加えているのですが、 カスタムタクソノミー一覧ページを表示している際、カスタムメニューの該当部分に「current_page_item」クラスが付与されません。
もともと、カスタム投稿タイプで投稿したページ全てが、選択時に「投稿ページ」メニューに current_page_parent が付いてしまっていたのですが、調べてみると、

wp-includes/nav-menu-template.phpの396-398行目(ver 3.1.2)
_wp_menu_item_classes_by_context関数

にあるコードが問題のようです。 ここで、$home_page_id は投稿ページのIDなので、投稿ページのメニューか否かの判断以外では、$wp_query->is_pageがない、つまり固定ページでなければ current_page_parent を付けるというロジックになっています。
つまり、カテゴリー、タグ、カスタム投稿タイプ、カスタム分類、アタッチメントや検索結果の表示でも、投稿ページのメニューに current_page_parent が付いてしまうことになります。。。
WordPressのtracでも、この件は報告されているので、今後のバージョンでは、修正されるかもしれないとのこと。 そんなわけで、warna.infoさんのところで以下のコードを頂きました。ありがとうございます。

最初のコードをリファクタリングして、他の状況(カスタム分類とかね)においても正しく動作するようにしてみた。

※自分のサイト用に書き換えています。 ただ、コードだと「カスタム投稿タイプ表示用」の固定ページを作って、 そのページをカスタムメニューで追加することになります。
アーカイブ用のテンプレートファイルを作って、 get_post_type_archive_link() タグでの表示をする場合、 アーカイブページを表示している際、カスタムメニューの該当部分に「current_page_item」クラスが付与されません。