web-dev-qa-db-ja.com

子要素をメニュー要素に追加する方法(wp_nav_menu_objectsを使用)

(1) カスタムメニューリンクでログアウト機能を使用するには? の回答で与えられたコードを使用して、プログラムでwp_nav_menu_objectsにメニュー要素を追加しました。動物」)。私はそれにidを与えます、1000と言います。

(2)同様に、私は(menu_item_parentを親要素のidに固定する)既存の要素の子になりたい要素をうまく作成しました(要素 "Flowers"に "Jonquil"のように)。

(3)プログラムで追加された要素 "Animals"に子要素( "Cats"や "Dogs"と言う)を追加しようとすると問題が発生します。猫と犬は、まるでWPが親を見つけることができなかったかのように、動物と同じレベルに表示されます。

何が足りないのかという考え?

1
Leo

2014年の回答以来、WordPressの機能は変わりました。

今日(バージョン4.6.1)から、このコードは "My Menu"という名前のメインメニュー、メインアイテムとサブアイテムを作成します。

コードを実行するには、 子テーマ にfunctions.phpファイルを貼り付けて保存します。

$menu_id = wp_create_nav_menu('My Menu');

$parent_item = wp_update_nav_menu_item($menu_id, 0, array(
    'menu-item-title' =>  __('Main Page'),
    'menu-item-url' => home_url( '/main-page/' ), 
    'menu-item-status' => 'publish', 
    )
);

wp_update_nav_menu_item($menu_id, 0, array(
    'menu-item-title' =>  __('Sub Item Page'),
    'menu-item-url' => home_url( '/sub-item-page/' ), 
    'menu-item-status' => 'publish', 
    'menu-item-parent-id' => $parent_item)
);

ドキュメント:

3
BenB

あなたのコードはこのように見えるかもしれません

    add_filter( 'wp_nav_menu_objects', 'ravs_add_menu_parent_class' );
    function ravs_add_menu_parent_class( $items ) {
      foreach ( $items as $item ) {
       print_r($item);//print each menu item an get your parent menu item-id
      }
      $link = array (
            'title'            => 'Cats',
            'menu_item_parent' => id of Animals menu like 1372,
            'ID'               => '',
            'db_id'            => '',
            'url'              => 'www.google.com'
        );
      $items[] = (object) $link;
      return $items;    
    }
1
Ravinder Kumar

レオ、

Ravsは既存のWP_Post_Objectにsub navを追加するのが正しいです、しかし、あなたがnavアイテムを作成しているならば、それにsubnavを加えたいなら、あなたはnavアイテムのdb_idをセットしなければなりません:

add_filter( 'wp_nav_menu_objects', 'ravs_add_menu_parent_class' );
function ravs_add_menu_parent_class( $items ) {
    $animals = array (
        'title'            => 'Animals',
        'menu_item_parent' => 0,
        'ID'               => 999999999999876, //an unlikely, high number
        'db_id'            => 999999999999876, //an unlikely, high number
        'url'              => 'www.google.com?s=animals'
    );
    $items[] = (object) $animals;

    $cats = array (
        'title'            => 'Cats',
        'menu_item_parent' => 999999999999876,
        'ID'               => '',
        'db_id'            => '',
        'url'              => 'www.google.com/?s=cats'
    );
    $items[] = (object) $cats ;

    return $items;    
}
0
danbrellis