web-dev-qa-db-ja.com

その場でカスタムメニューにページを追加する方法

可能な重複:
スクリプトを使ってカスタムメニューにページを追加できますか?

私のテーマは "カスタムヘッダーメニュー"と呼ばれるカスタムメニューを持っていて、私はその場で投稿やページでカスタムメニューをシードするために私がカスタマイズしたいサイトデフォルトを設定し私の静的ページを作成するプラグインを持っています。

だから私は私が作成しているページのそれぞれがカスタムメニューに追加/割り当てられるようにプラグインにコードを追加したいと思います。

スクリプトを使ってその場でカスタムメニューにページを追加する方法についての参照ポイントを探しています...

Wp-includes/nav-menu.phpから、これを使うことを期待しています...

wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item_data = array() )

$ menu_idは私の "Custom Header Menu"のIDで、$ menu_item_dataは私がメニューに割り当てているページの配列です。

1
Scott B

もう説明は必要ないと思います。

$mymenu = wp_get_nav_menu_object('Main Navigation Menu');
$menuID = (int) $mymenu->term_id;
$myPage = get_page_by_title('About Us');

$itemData =  array(
    'menu-item-object-id' => $myPage->ID,
    'menu-item-parent-id' => 0,
    'menu-item-position'  => 2,
    'menu-item-object' => 'page',
    'menu-item-type'      => 'post_type',
    'menu-item-status'    => 'publish'
  );

wp_update_nav_menu_item($menuID, 0, $itemData);
4
kaiser

あなたのプラグインの名前を投稿できますか?多分誰かがこの特定の質問に対する解決策をすでに持っています。

解決策はありません。 「新しい」wp-navmenu機能はあまり試したことがないので、いくつか提案をしておくことができます。

  1. WordPressテーブルに新しい投稿を作成する関数/メソッドをプラグインで検索してください。
  2. 作成された投稿のIDを返します(wp_insert_post()、wp_update_post()はデフォルトでそれを返します)。
  3. 指定されたIDの投稿をメニューに追加します。
    • Wp_postsテーブルに投稿がある場合 - wp-nav-menu項目は投稿タイプが "wp-nav-item"の単純な投稿です。また、正しい用語を追加して、wp_term_relationshipsテーブルで関係を確認する必要があります。
    • フィルターフック付き。 'wp_get_nav_menu_items' wp-includesディレクトリにある "nav-menu.php"ファイルを見てください。 525行目で、関数 "wp_get_nav_menu_items"に割り当てられたフィルタフックを見ることができます。この方法は永久的なものではないので、管理パネルの[メニュー]セクションで投稿/ページを編集することはできません。だからオプションNr.1はおそらくあなたの問題を解決するための方法です。
1
rofflox