条件でメニューを分岐する機能を追加して欲しい

0
いいねをした人: 居ません
  • このトピックには6件の返信、2人の参加者があり、最後にHatsukiにより4年、 6ヶ月前に更新されました。
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #30271
    Hatsuki
    閲覧者
    6

    v8に少し欲しいなと思っている1つが、条件でメニューの表示を分岐する機能です。

    register_nav_menus … の前に配列を増やすフックを用意してもらい、増やしたメニューを渡せるようにすれば出来るのでは…と思うんですがタイミングがちょっと難しいですかね。
    (確かメニューって何かしらフックのタイミングありましたよね?)

    wp_nav_menu 前に、別のフックで実際にどのメニューを出すかを決定出来るようになれば良いと思ってます。

    これがあれば、このメンバーには…とメニューのカスタマイズが出来ないかと思ってるんですが、どうでしょうか?

    0
    いいねをした人: 居ません
    #30274
    キタジマ タカシ
    参加者
    2253

    wp_get_nav_menu_itemswp_nav_menu_itemswp_nav_menu_{$menu->slug}_items あたりでできないですかね?

    0
    いいねをした人: 居ません
    #30303
    Hatsuki
    閲覧者
    6

    あー、多分それで出来るような感じもするんですが、管理画面のメニューでその分岐しているメニューって出せます?
    メンバー用メニューと言うメニューを作って、そこにメニューを追加したいと言いますか…

    現場の人が条件に応じたメニューを編集出来るようにカスタマイズしてるんですが、メニュー辺りを子テーマの上書きを結構しているので何とかならないかなーと言う感じです。

    0
    いいねをした人: 居ません
    #30308
    キタジマ タカシ
    参加者
    2253

    wp_nav_menu() の仕組みを完全には把握していないので、できるかどうかは置いておいて…という前提で、ダッシュボード > メニューで「グローバルメニュー」「メンバー用メニュー」という2つのメニューをつくって、条件に応じてどちらかを global-nav に割り当てるということでしょうか?

    と書きながら気づいたのですが、単純に Snow Monkey が register_nav_menus() で定義している location を増やしたいということですかね?もしそうなら、普通に子テーマか My Snow Monkey で register_nav_menu() したらイケる気がする…。

    0
    いいねをした人: 居ません
    #30350
    Hatsuki
    閲覧者
    6

    > ダッシュボード > メニューで「グローバルメニュー」「メンバー用メニュー」という2つのメニューをつくって、条件に応じてどちらかを global-nav に割り当てるということでしょうか?

    そんな感じです。

    > 単純に Snow Monkey が register_nav_menus() で定義している location を増やしたいということですかね?もしそうなら、普通に子テーマか My Snow Monkey で register_nav_menu() したらイケる気がする…。

    んと…一応プラグインでガリガリ書けば出来るのは判明してます。

    after_setup_theme の中で register_nav_menus でメニューの再定義をする。
    それで、ダッシュボードの メニュー > メニューの位置には再定義したメニュー名が追加されます。
    ですが、register_nav_menus には global-nav とか既にregistされているメニューごと再定義しないと駄目なので、現在登録されてるメニューを取得して上手く返す為の仕組みが欲しいなと。他のフック使えば追加したいメニューだけで定義出来るかもですけど。
    いや、それはもしかして書かれていた wp_get_nav_menu_items とか使えば出来るのかも(できたらスミマセン
    まー、複数のプラグインで register_nav_menus を定義しまくるってどうなのか…と言うのも有ります。

    それとは別の問題で、
    template の header などの方で has_nav_menu( ‘global-nav’ ) などの条件入れてるのでフックとかで global-nav-member とか作ったのを上手く定義で返すと template 側の分岐で除外されるせいで、そのままだとメニューが出なくなってしまいます。
    global-nav-member のメニュー定義を global-nav として読ませれば template を上書きなどしなくても読めるとは思いますが、実用的ではない。
    なもんで、思い切り template をゴッソリと上書きしてやってますが、そこの分岐部分とかをもう少し上手く何かコンパクトに出来たら良いなーと言う感じです。

    0
    いいねをした人: 居ません
    #30371
    キタジマ タカシ
    参加者
    2253

    これでどうだ!

    
    /**
     * 新しいメニュー(location)を追加
     */
    add_action(
    	'after_setup_theme',
    	function() {
    		register_nav_menu( 'global-nav-member', 'メンバー用gnav' );
    	}
    );
    
    /**
     * global-nav のありなしチェック時に、条件に応じて global-nav-member のありなしチェックを返す
     */
    add_filter(
    	'has_nav_menu',
    	function( $has_nav_menu, $location ) {
    		if ( 'global-nav' === $location ) {
    			return has_nav_menu( 'global-nav-member' );
    		}
    		return $has_nav_menu;
    	},
    	10,
    	2
    );
    
    /**
     * global-nav を表示するとき、条件に応じて global-nav-member を表示する
     */
    add_filter(
    	'wp_nav_menu_args',
    	function( $args ) {
    		if ( 'global-nav' === $args['theme_location'] ) {
    			$args['theme_location'] = 'global-nav-member';
    		}
    		return $args;
    	}
    );
    0
    いいねをした人: 居ません
    #30414
    Hatsuki
    閲覧者
    6

    has_nav_menuってフックあったんですね(汗
    知らなかった……。

    そして、ここまでスッキリになるとはorz
    $args[‘theme_location’] とか含めて色々参考にしながら他のカスタマイズも応用してみます。
    回答めっちゃありがとうございました!

    0
    いいねをした人: 居ません
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • トピック「条件でメニューを分岐する機能を追加して欲しい」には新しい返信をつけることはできません。

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。