0

ここ SOW との場所の両方で、多くの人が私とまったく同じ問題を抱えています。

BBpress プラグインを自分のサイトにインストールしました ここ. このプラグインは、サイトで FORUM を有効にします。

フォーラムのサブメニュー項目が選択されたときに、プラグインが間違ったメニュー項目を強調表示するというこの文書化された問題について、私は何日も (無駄に) 格闘してきました。代わりに、ブログ メニュー項目がデフォルトで強調表示されます。

確認してください: [フォーラム] をクリックすると、この結果のページで [フォーラム] メニュー項目が強調表示されます。ただし、[フォーラムのテスト] をクリックすると (または他のフォーラム アイテムにドリルダウンすると)、結果のページで常に [ブログ] が強調表示されます。

これが私がこれまでに知っていることです:

  • CSSだけでは解決できません。
  • パーマリンクを使用しています(「投稿名」を選択)
  • PHP は、ナビゲートしたページに基づいて、.current-menu-itemおよび/またはクラスを (対応するおよびクラス.current_page_itemと共に) メニュー項目に割り当てます。何らかの理由で、フォーラムのサブメニューを現在のページとして表示できません。その結果、現在のページ アイテムとしてデフォルトで「ブログ」が設定されています。-ancestor-parent
  • だから私は次のことをする必要があることを知っています:
    1. 各ページの読み込み時にWordpressにURLをチェックさせる
    2. "/forums/"が URL の一部である場合は、すべて.current-menu*.current_page*クラスを削除します(祖先/親クラスを削除するには、ワイルドカードが必要です)
    3. .current-menu-item次に、.current_page_itemクラスを"Forum"メニュー項目に割り当てます。

問題は、私は近づいていると思いますが、これを行う方法が正確にわからないことです。

私はたくさんのことを試しました。

このJquery ソリューションを見つけましたが、実装方法がわかりません。また、このアプローチに自信がありません。

// First add a “forum-class” to your forums menu item in your custom menu 
// Then add this to your js file with YOURURL = the url of your site and forums = your forums slug : 

$(function() { 
    var forumURL = window.location.href.indexOf("YOURURL/forums/");
    if(forumURL > -1){
        $('li.forum-class').addClass('current-menu-item');
    }   
});

その後、私が望んでいたものに近いと思われるこのアプローチを見つけましたが、新しいクラスが導入され、Blog メニューから間違ったクラスがクリアされないようです。さらに、このコードを正確に配置する場所や、js ファイルを作成する場所がわかりません。

if (strtolower($thats_all->post_title) == "forum" || strtolower($thats_all->post_title) == "forums") {
    $addclass = ' class="current_page"';
} else {
    $addclass = '';
}

最後に、これは私が必要だと思うものを見つけましたが実装に問題があります (私はそれを私のものに貼り付けようとしましたが、うまくいきませんでした)。menu-primary.phpheader.php

// this forces the class current-menu-item to a menu item which I named 'forums' 

add_filter('nav_menu_css_class', 'remove_link_parent_menu_classes', 420 ,3);
function remove_link_parent_menu_classes($classes, $item, $args){

if(strpos($item->url, '/forums/') !== true)
    return array_diff($classes, array('current_page_item', 'current-menu-item'));

return $classes;
}

私は近いと思います。本当に近い。正しい方向へのプッシュが必要です。私は知る必要がある:

  • 上記の後者のソリューションは機能しますか?
  • コードを配置する必要があるのは、どのファイルで、ファイル内の正確な場所ですか?

ありがとう!

4

1 に答える 1

0

やっと割れました!上記の手がかりを使用して、私のために働いたこのコードを見つけました。

add_filter( 'nav_menu_css_class', 'namespace_menu_classes', 10, 2 );
function namespace_menu_classes( $classes , $item ){
    if ( get_post_type() == 'forum' ) {
        $classes = str_replace( 'current_page_parent', '', $classes );
        $classes = str_replace( 'menu-item-16', 'current_page_parent', $classes );
    }
    return $classes;
}

上記をファイルの最後にコピーしfunction.phpます。

次に'forum'、選択したスラッグ名に変更し、'menu-item-16'強調表示する正しい番号のメニュー項目に置き換えます (これを見つけるには、Web ブラウザーの開発者ツールを使用してサイトを検査する必要があります)。

これを理解するのに(そして必要なphpを学ぶのに)1週間かかりました!頑張ってください。これが他のすべての人に役立つことを願っています。

于 2014-08-22T04:11:02.820 に答える