web-dev-qa-db-ja.com

現在のメニュー項目のCSSクラスをWordpressメニューのカスタムページタイプアーカイブに追加します。

私はこれについてたくさん読んでいますが、解決策を見つけることができませんでした。

基本的に私はカスタムページタイプのアーカイブによって作成された動的ページに現在のメニュー項目を表示しようとしています。デフォルトのメニューコントロールは、現在のメニュー項目のCSSクラス名を追加しません。私はここで解決策を見つけました - http://bloggingsquared.com/blogging-tips/how-to-add-the-current-menu-item-css-class-to-a - ワードプレスメニューのカスタムリンク/

これはこんな感じです:

add_filter('nav_menu_css_class', 'AddCurrentMenuItemClass',1,2);

function AddCurrentMenuItemClass($classes,$item)
{
    $link = site_url().$_SERVER['REQUEST_URI'];
    if(strpos($link, $item->url) !== false)
    {
        $classes[] = 'current-menu-item';
    }
    return $classes;
}

私が抱えている問題は、Homeページ(これはカスタムメニュー項目です)が私がアクセスしているページと同様にハイライトされることです。 if文を次のように変更したとします。

     if ( $link == $item->url )

それから、そのページではなくサブページでは動作します。

あなたは私がこれを整理するのを手伝ってもらえますか?私は正しい締め切りでクライアントプロジェクトに取り組んでいます...

私はWP 3.4.2にWooThemesプレミアムテンプレートを付けています:Whitelight

2
Zohar

これはあなたがやりたいことです、

  add_filter( 'wp_get_nav_menu_items', 'cpt_archive_menu_filter', 10, 3 );
  function cpt_archive_menu_filter( $items, $menu, $args ) {
    foreach ( $items as &$item ) {
    if ( $item->type != 'custom' ) continue;
      if (  get_query_var( 'post_type' ) == 'your-post-type' && $item->title == 'Title of Link' ) {
        $item->classes []= 'class-name-your-want';
        } 
    }
    return $items;
  } 

上記はうまくいきますが、カスタムリンクcurrent-menu-itemクラスが割り当てられるので、これが必要ではないはずです。

1
userabuser