質問: カスタムナビゲーションメニューでリストアイテムに多数のクラスが生成されるのはなぜですか?どうにかこれを管理できますか? 以下は一例です。現在のアイテムを除いて、各アイテムに3つのクラスが添付されています。現在のアイテムには6があります。<ul id="menu-global-nav" class="sf-menu"> <li id="menu-item-63" class="menu-item menu-item-type-post_type current-menu-item page_item page-item-5 current_page_item menu-item-63"><a href="#">home</a></li> <li id="menu-item-30" class="menu-item menu-item-type-post_type menu-item-30"><a href="#">services</a> <ul class="sub-menu"> <li id="menu-item-39" class="menu-item menu-item-type-post_type menu-item-39"><a href="#">case studies</a></li> <li id="menu-item-38" class="menu-item menu-item-type-post_type menu-item-38"><a href="#">story discovery</a></li> </ul> </li> <li id="menu-item-32" class="menu-item menu-item-type-post_type menu-item-32"><a href="#">company</a></li> <li id="menu-item-29" class="menu-item menu-item-type-post_type menu-item-29"><a href="#">why case studies?</a></li> <li id="menu-item-28" class="menu-item menu-item-type-post_type menu-item-28"><a href="#">case study showcase</a></li> <li id="menu-item-27" class="menu-item menu-item-type-post_type menu-item-27"><a href="#">resources</a></li> <li id="menu-item-26" class="menu-item menu-item-type-post_type menu-item-26"><a href="#">online store</a></li> <li id="menu-item-25" class="menu-item menu-item-type-post_type menu-item-25"><a href="#">contact us</a></li> </ul>
回答: 現在のバージョンのwp(3.5.1)では動作しないため、one trick ponyのコードから変更しました。wpとしてダッシュクラスが追加され、ページ階層クラスのアンダースコアバージョンとダッシュバージョンの両方が含まれるようになりました。diffがフィルタ処理されたリストの代わりにすべてのクラスを返すようにarray_diff - > array_intersectを変更しました。// for custom menus add_filter('nav_menu_css_class', 'normalize_wp_classes', 10, 2); // for the page menu fallback (wp_list_pages) add_filter('page_css_class', 'normalize_wp_classes', 10, 2); /** * @param $classes array * @param $item object * @return array */ function normalize_wp_classes($classes, $item){ // old class => new class $replacements = array( 'current-menu-item' => 'active', 'current-menu-parent' => 'active-parent', 'current-menu-ancestor' => 'active-parent', 'current_page_item' => 'active', 'current_page_parent' => 'active-parent', 'current_page_ancestor' => 'active-parent', 'current-page-item' => 'active', 'current-page-parent' => 'active-parent', 'current-page-ancestor' => 'active-parent' ); // do the replacements above $classes = strtr(implode(',', $classes), $replacements); $classes = explode(',', $classes); // remove any classes that are not present in the replacements array, // and return the result return array_unique(array_intersect(array_values($replacements), $classes)); }