web-dev-qa-db-fra.com

Comment ajouter un élément enfant à un élément de menu (à l'aide de wp_nav_menu_objects)

(1) J'ai utilisé le code donné en réponse à Comment utiliser la fonction de déconnexion sur un lien de menu personnalisé? pour ajouter par programme un élément de menu à wp_nav_menu_objects (Dites "Animaux"). Je lui donne un identifiant, disons 1000.

(2) De même, j'ai créé avec succès des éléments que je voulais être les enfants d'un élément préexistant (en fixant menu_item_parent à l'identifiant de l'élément parent) (comme "Jonquil" dans l'élément "Fleurs")

(3) Le problème survient lorsque j'essaie d'ajouter des éléments enfants (Dites "Chats" et "Chiens") à mon élément ajouté par programmation, "Animaux". Les chats et les chiens apparaissent au même niveau que les animaux, comme si WP n'arrivait pas à retrouver leur parent ... (Oui, j'en fais 3 après 1 ...)

Une idée de ce que je peux manquer?

1
Leo

Les fonctions WordPress ont changé depuis les réponses ici en 2014.

À partir d’aujourd’hui (version 4.6.1), ce code créera un menu principal intitulé "Mon menu", élément principal et sous-élément.

Pour exécuter du code, il suffit de coller et d’enregistrer dans votre fichier functions.php dans votre thème child .

$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)
);

Docs:

3
BenB

vous code peut ressembler à ceci

    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

Leo,

Ravs est correct pour ajouter un sous-navigateur à un WP_Post_Object existant, mais si vous créez l'élément de navigation, puis souhaitez ajouter un sous-navigateur, vous devez définir le db_id de l'élément de navigation:

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