-
投稿者投稿
-
2019年10月10日 12:07 PM #30271
v8に少し欲しいなと思っている1つが、条件でメニューの表示を分岐する機能です。
register_nav_menus
… の前に配列を増やすフックを用意してもらい、増やしたメニューを渡せるようにすれば出来るのでは…と思うんですがタイミングがちょっと難しいですかね。
(確かメニューって何かしらフックのタイミングありましたよね?)wp_nav_menu
前に、別のフックで実際にどのメニューを出すかを決定出来るようになれば良いと思ってます。これがあれば、このメンバーには…とメニューのカスタマイズが出来ないかと思ってるんですが、どうでしょうか?
♥ 0いいねをした人: 居ません2019年10月10日 2:00 PM #30274wp_get_nav_menu_items
、wp_nav_menu_items
、wp_nav_menu_{$menu->slug}_items
あたりでできないですかね?♥ 0いいねをした人: 居ません2019年10月10日 5:32 PM #30303あー、多分それで出来るような感じもするんですが、管理画面のメニューでその分岐しているメニューって出せます?
メンバー用メニューと言うメニューを作って、そこにメニューを追加したいと言いますか…現場の人が条件に応じたメニューを編集出来るようにカスタマイズしてるんですが、メニュー辺りを子テーマの上書きを結構しているので何とかならないかなーと言う感じです。
♥ 0いいねをした人: 居ません2019年10月10日 9:46 PM #30308wp_nav_menu()
の仕組みを完全には把握していないので、できるかどうかは置いておいて…という前提で、ダッシュボード > メニューで「グローバルメニュー」「メンバー用メニュー」という2つのメニューをつくって、条件に応じてどちらかを global-nav に割り当てるということでしょうか?と書きながら気づいたのですが、単純に Snow Monkey が
register_nav_menus()
で定義している location を増やしたいということですかね?もしそうなら、普通に子テーマか My Snow Monkey でregister_nav_menu()
したらイケる気がする…。♥ 0いいねをした人: 居ません2019年10月11日 12:44 PM #30350> ダッシュボード > メニューで「グローバルメニュー」「メンバー用メニュー」という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いいねをした人: 居ません2019年10月12日 8:38 AM #30371これでどうだ!
/** * 新しいメニュー(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いいねをした人: 居ません2019年10月12日 10:14 PM #30414has_nav_menuってフックあったんですね(汗
知らなかった……。そして、ここまでスッキリになるとはorz
$args[‘theme_location’] とか含めて色々参考にしながら他のカスタマイズも応用してみます。
回答めっちゃありがとうございました!♥ 0いいねをした人: 居ません -
投稿者投稿
- トピック「条件でメニューを分岐する機能を追加して欲しい」には新しい返信をつけることはできません。