まず第一に、私は開発者ではなく、独学で学んでいるだけです。私はまだphpとjavascriptを深く理解していません。
私は自分の WordPress サイトをテスト対象として、また学習の場として開発しています。320Press WP-Bootstrap という親テーマを持つカスタム子テーマで Twitter ブートストラップを使用しました。私はこの分野では問題ありません。それのphp側でのみ。
トップ ナビゲーション バー メニューに関する問題に直面しています。目的のメニュー項目の .active クラスを起動できませんでした。
メニューは、メニュー追加ウィジェットを使用して管理パネルから作成されます。メニューの親項目は BLOG と呼ばれ、その子項目は BLOG のカテゴリです。基本的に、ブログ メニューは TOP NAV BAR MENU の子アイテムです。私の TOP NAV BAR MENU には、ホーム、ブログ、および情報メニューがあります。ブログ メニューをクリックすると、テーマのドロップ ダウン メニュー機能がトリガーされ、利用可能なブログ カテゴリが表示されます。パーマリンク設定をhttp://mysite.com//blog/%postname%/のようなカスタム構造に設定しました
静的ページを作成し、ホームページとして設定しました。アクティブなクラスは、その URL、ルート ドメインで動作しています。私のテーマの function.php は、現在のメニュー項目クラスをターゲットにして、.active クラスを追加しています。しかし、ブログ セクション (カスタム ページでもあります) に移動すると、アクティブなクラスがナビゲーション メニューの「ブログ」に追加されません。メニュー「ブログ」は、管理メニュー ウィジェット経由で追加されました。
あるユーザーは、サーバー側でこの問題に取り組むことを提案したので、彼はいくつかの php コードを追加することを意味していると思います。
しかし、私はまだそのスキルを持っていません。しかし、wordpress には codex が用意されているため、コードをコピーして貼り付けて微調整する必要があるかもしれません。しかし、それを微調整するには、まだ PHP のスキルが必要です。ネットで同様の問題をいくつか検索し、いくつかの有効な解決策を見つけましたが、特定の問題を解決するためにそれを実装する方法がわかりません。
ここでいくつかの同様の質問を見つけました:
現在のURLに基づくメニュー項目へのjqueryアクティブクラス
しかし、それを実装する方法がわかりません。
これもワードプレスフォーラムから見つけました。値を自分の値に置き換えましたが、機能していません。
これは、WordPress のナビゲーション メニューの外観です。
<div class="nav-collapse collapse">
<ul class="nav">
<li class="cateogry-1">Home</a></li>
<li class="this-shall-become-active"><a data-toggle="dropdown" class="dropdown-toggle" title="blog">Blog<b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="category-1"><a href="../blog/cat1">Blog Category 1</a></li>
<li class="category-2"><a href="../blog/cat2">Blog Category 2</a></li>
</ul>
</li>
<li class="somelink1"><a href="#">Some Link 1</a></li>
<li class="somelink2" ><a href="#">Some Link 2</a></li>
</ul>
</div>
<li>
主な目標はul#nav
、ユーザーが mysite.com/blog および /blog パスの下にある他のすべてのページを閲覧しているときに、ブログ メニューに .active クラスを追加することです。
更新 1
ナビゲーションに current_page_parent または current_page_ancestor が見つかりません。
更新 2
wordpressコーデックスサイトを読んで、これを見つけました
add_filter( 'wp_nav_menu_objects', 'add_menu_parent_class' );
function add_menu_parent_class( $items ) {
$parents = array();
foreach ( $items as $item ) {
if ( $item->menu_item_parent && $item->menu_item_parent > 0 ) {
$parents[] = $item->menu_item_parent;
}
}
foreach ( $items as $item ) {
if ( in_array( $item->ID, $parents ) ) {
$item->classes[] = 'menu-parent-item';
}
}
return $items;
}
親<li>
にクラス名を追加します。これをさらにターゲットにして、.active クラス名を追加できるようになりました。
ここで、.active クラスを menu-parent-item に追加するコードが必要でした。