私のサイトのメニューを wp_nav_menu を利用するように更新しました。これをWPで設定するのはかなり簡単でしたが、特に単一の投稿ページで、コンテンツが属する現在のページを強調表示するためにWordpressがその親/祖先クラスを出力する方法で1つの小さな障害に遭遇しました.. .
で現在のページを強調表示する.current_page_item a
と.current_page_parent a
、子供がいる通常のページにある限り完璧に機能しますが、イベントやメディアからの投稿にアクセスするとすぐに、メニューのブログ リンクが代わりに強調表示されますが、これは明らかに正しくありません。
*Wordpress の出力を見ると明らかに間違っている点の 1 つは、投稿が属する適切なli タグで現在のページ クラスが生成されていないことです。これが問題の原因であると思われます。
今後の参考のために、イベント、メディア、およびブログのページはすべて、そのページのそれぞれのカテゴリのみを取得するために作成した特別なクエリを使用します。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("category_name=media&paged=$paged");
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="post">
</div>
<?php
endwhile;
else:
endif;
それが十分な情報であることを願っています。ベスト、SB
編集 - 2011 年 8 月 3 日
以下は、wp_nav_menu が間違った li タグで現在のクラスを生成していると私が言ったときに参照しているもののスクリーン ショットです。青色で強調表示されているのは、投稿が実際に属しているメニュー項目です。灰色で強調表示されているのは、wordpress が現在のクラスを代わりに追加することを決定した不適切な li タグです。
http://img688.imageshack.us/img688/4180/picture2zo.png
編集 - 2011 年 8 月 4 日
多分これは、Hadvig の助けを借りて、これまでのところメニュー設定がどのように改善されているかを示すのに役立つでしょうか?
私のfunctions.phpテンプレートには -
<?php
// Add Custom Menu Support
if ( function_exists( 'register_nav_menu' ) ) {
register_nav_menu( 'epr_menu', 'EPR Main Menu' );
}
function my_menu_items_hook($items, $menu, $args) {
if ( 'epr_menu' == $menu->slug ) { // check if it is process your top menu
if ( is_single() ) { // check if single post loaded
if ( in_category('events') || in_category('media') ) {
foreach ( $items as $key => $value ) {
if ( 'blog' == $value->ID ) {
$items[$key]->classes[] = array(); //unset classes for blog item
}
// add class if post from event category
if ( in_category('events') && 'events' == $value->ID ) {
$items[$key]->classes[] = 'current-menu-item';
}
// add class if post from media category
if ( in_category('media') && 'media' == $value->ID ) {
$items[$key]->classes[] = 'current-menu-item';
}
}
}
}
}
return $items;
}
add_action('wp_get_nav_menu_items', 'my_menu_items_hook', 10, 3);
?>
私のheader.phpテンプレートでは、メニューを次のように呼び出しています-
<div id="nav_wrapper">
<ul id="nav">
<?php wp_nav_menu( array( 'container' => '', 'items_wrap' => '%3$s' ) ); ?>
</ul>
</div>