web-dev-qa-db-ja.com

プログラムでメニューをプライマリメニューに設定する方法

私はすでに読んできました どのようにプログラムでプライマリメニューを切り替えるには? しかしそれは実際には質問に答えていません。承認された回答は2つの回避策ですが、質問に対する実際の回答ではありません。

テーマがアクティブになったら、いくつかのメニューを作成し、そのうちの1つをプライマリメニューとしてマークします。

プログラムで作成したメニューをプライマリメニューにするために呼び出すことができるワードプレス機能はありますか?私は熟練した開発者ですが、私はwordpressに慣れていません。そして、関数の用語は私が探しているものを見つけるためにコーデックスを検索することを非常に難しくします。任意の助けは大歓迎です。

2
Kenny Wyland

私はワードプレスのコードを掘り下げて、管理UIからフォームを送信してどの関数が呼び出されているのかを確認し(そして渡された変数に対してvar_export()を実行して)、set_theme_mod( 'nav_menu_locations', $menu_locations );が呼び出されているのを確認しました。これを使用するようにコードを更新しましたが、動作しているようです。

$locations = get_theme_mod('nav_menu_locations');
$locations['primary'] = $menu_id;
set_theme_mod( 'nav_menu_locations', $locations );

これを行う方法を見つけようとしたときに私を見送ったことの1つは、get_theme_mod()のドキュメントには文字列を返すと書かれているということですが、この場合は配列を返すので、そうではなかったと思います仕事に行きます。

4
Kenny Wyland

あなたがこれを探しているように聞こえます。

functions.phpに追加

$locations = get_theme_mod('nav_menu_locations');
$locations['primary-menu'] = $term_id_of_menu;
set_theme_mod( 'nav_menu_locations', $locations );

ソース: https://stackoverflow.com/a/19637827/7243209

2
Liam Stewart