質問: wp_nav_menu()nav構造内の子供のない先祖クラスの強調表示 ( モデレータによるメモ: 当初は「wp_nav_menuナビゲーション構造内に子がない先祖クラス」というタイトルでした) ヘッダーにwp_nav_menuがあり、3ページあります。私がそれらのページの1つにいるとき、そのページをメニューに含むliはクラス.current_page_itemを取得します。これら3つのページにはテンプレートがあり、これらのテンプレートには特定のコンテンツタイプのすべての投稿を取得するためのカスタムクエリが含まれています。実際には、このトップレベルページで認識されている "children" は実際には子供ではなく、テンプレートを使用してそのトップレベルページに関連付けたコンテンツタイプにすぎません。ユーザーが特定の投稿タイプの単一のページを参照しているときに、最上位のメニュー項目に'current-ancestor'クラスを取得してもらいたい。この場合も、テンプレートファイルのカスタムクエリでのみそのページに関連付けられています。それが理にかなっていることを願っています - そうでなければ、私があなたを失った場所を私に知らせてください!どうもありがとうございました。 - 詳細の編集: たとえば、テンプレートを使用している ワークショップ という静的ページがあります。そのスラッグは workshops です。テンプレートにはカスタムのget_posts関数があり、その中にループがあります。これにより、 workshops というカスタムコンテンツタイプの投稿がすべて表示されます。これらのワークショップのタイトルの1つをクリックすると、そのコンテンツの全内容に移動します。カスタム投稿タイプのパーマリンク構造はworkshops / postname に設定されているので、ユーザーが見ると、これらのコンテンツは実際にはすべて1つのコンテンツタイプである場合、workshopsページの子になります。しかし、そのページとは無関係です。それは私がメニューで効果的に閉じる必要があるそのギャップです、タイプ 'workshop'の内容を閲覧するときに 'workshops'メニュー項目をハイライトします。繰り返しますが、それが理にかなっていることを願って、私は1つの段落で20回以上の「ワークショップ」を言ったと思います!
回答: @somatic - それは幻想的です!私はあなたのコードを少し修正したので、それは特定の分類法(私は関連するpost_typeのためだけに使っています)のためにも働く。アイデアは、メニュー項目のtitle属性を使用して、post_typeの名前と分類の名前の両方をセミコロンで区切って格納し、その後関数によって展開することです。add_filter('nav_menu_css_class', 'current_type_nav_class', 10, 2 ); function current_type_nav_class($classes, $item) { # get query vars $post_type = get_query_var('post_type'); $taxonomy = get_query_var('taxonomy'); # get and parse title attribute of menu item $title = $item->attr_title; // menu item title attribute, as post_type;taxonomy $title_array = explode(";", $title); $title_posttype = $title_array[0]; $title_taxonomy = $title_array[1]; # add class if needed if ($title != '' && ($title_posttype == $post_type || $title_taxonomy == $taxonomy)) { array_push($classes, 'current-menu-item'); }; return $classes; }