web-dev-qa-db-ja.com

を割り当てる方法 WP スクリプトを介してテーマのナビゲーションメニューの場所に3.0カスタムナビゲーションメニュー?

私はその場で新しいカスタムメニューを作成し、それにページを割り当てるためにプラグイン内でこのスクリプトを使用しています...

$menu_id = wp_create_nav_menu( 'header-menu' );
$menu = array( 'menu-item-type' => 'custom', 'menu-item-url' => get_home_url('/'),'menu-item-title' => 'Home', 'menu-item-status' => 'publish' );
wp_update_nav_menu_item( $menu_id, 0, $menu );

そしてこれはうまくいきます。しかし、私が行き詰まっているのは、このメニューをテーマの「メニューの場所」の1つに接続する方法です。私は私のテーマのfunctions.phpに "header-menu"と呼ばれるナビゲーション位置を登録しているので、上のコード、wp_create_nav_menu( 'header-menu')を呼び出すことで私のカスタムメニューを私のテーマで定義された位置にフックする"header-menu"だがそうではない。

たとえば、私のテーマは2つのメニュー位置を登録しています...

register_nav_menus(
  array('header-menu' => __( 'My Header Menu' ), 
 'footer-menu' => __( 'Footer Menu' ))
);

Wp_create_nav_menu( 'Header Menu')で作成した「ヘッダメニュー」を、自分のテーマに登録した「自分のヘッダメニュー」の場所にフックする方法を教えてください。答えはnav-menu.phpのどこかにあると確信していますが、見つけることができません。

つまり、WordPressの[外観]> [メニュー]マネージャから、[テーマの場所]> [メインナビゲーションメニュー]の順に選択して、[ヘッダーメニュー]を選択して[保存]をクリックします。私はこれをスクリプトでやろうとしています。

2
Scott B

あなたのためにうまくいくこの答えをすでに見つけたのであれば、他の人が見るためにここに投稿することをお勧めします。そうでなかったら、私がそれについて行く方法はカスタムフィルタかアクションを使用することでしょう。

テーマ内のメニューが出力される場所で、apply_filtersまたはdo_actionを使用して必要なオーバーライドをトリガーし、プラグインでそのアクション/フィルターにフックしてオーバーライドを出力します。メニューの関連付けを上書きしないので、これは同じタスクを実行するためのより非破壊的な方法です。

1
Matthew Boynes