1

私のサイトのメニューを 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>

4

1 に答える 1

0

投稿ページをブログとして設定し、wordpress がすべての投稿の親 (メニュー内) として設定したため、問題があると思います。wp_get_nav_menu_itemsフックを使用して、この動作を変更することができます。例:

function my_menu_items_hook($items, $menu, $args) {

  if ( 'my-menu-slug' == $menu->slug ) { // check if it is process your top menu
    if ( is_single() ) { // check if single post loaded

      if ( in_category(EVENT_CATEGORY_ID) || in_category(MEDIA_CATEGORY_ID) ) {
        foreach ( $items as $key => $value ) {
          if ( BLOG_PAGE_ID == $value->object_id ) {
            $items[$key]->classes[] = array(); //unset classes for blog item
          }

          // add class if post from event category
          if ( in_category(EVENT_CATEGORY_ID) && EVENT_PAGE_ID == $value->object_id ) {
            $items[$key]->classes[] = 'current-menu-item';
          }

          // add class if post from media category
          if ( in_category(MEDIA_CATEGORY_ID) && MEDIA_PAGE_ID == $value->object_id ) {
            $items[$key]->classes[] = 'current-menu-item';
          }
        }
      }
    }
  }

  return $items;
}

add_action('wp_get_nav_menu_items', 'my_menu_items_hook', 10, 3);

EVENT_CATEGORY_ID と MEDIA_CATEGORY_ID をカテゴリ ID (または名前) に置き換える必要があります。また、EVENT_PAGE_ID と MEDIA_PAGE_ID をページ ID に置き換えます。「my-menu-slug」をメニュー スラッグに置き換えます。

もちろん、これは、イベント、メディア、またはブログから 1 つのカテゴリにのみ投稿を添付する場合にのみ機能します。

更新しました。

于 2011-08-04T08:33:41.757 に答える