web-dev-qa-db-fra.com

wp_update_nav_menu_item non enregistré dans l'API multisite

Je crée un script qui automatise la construction d'un site wordpress à partir d'un autre CMS. J'ai pu modifier tous les paramètres: thèmes, options, sous-domaines, titre du site, etc.

Mais ce qui m’échappe, c’est de pouvoir créer des menus personnalisés. Le code ci-dessous DEVRAIT être capable de le faire pour moi. Cependant, ce n'est pas le cas et je ne sais vraiment pas quoi faire.

Ce code n'est pas en cours d'exécution dans le panneau d'administration (ce n'est pas un plugin). En fait, il repose sur Wordpress et comprend des pages de fonctions wp-load et wp-admin.

$mymenu = wp_get_nav_menu_object("Main Navigation Menu");
$menuID = (int) $mymenu->term_id;
$itemData = array(
    'menu-item-db-id' => 0,
    'menu-item-object-id' => $pageId,
    'menu-item-object' => 'page',
    'menu-item-type'  => 'post_type',
    'menu-item-parent-id' => 0,
    'menu-item-position' => $itemOrder,
    'menu-item-title' => $pageData['title'],
    'menu-item-url' => get_permalink($pageId),
    'menu-item-description' => $pageData['post_content'],
    'menu-item-attr-title' => $pageData['post_excerpt'],
    'menu-item-status' => 'publish',<br />
    'menu-item-target' => ''<br />
);
$thisMenuItem = wp_update_nav_menu_item($menuID, 0, $itemData);

$ itemData est le résultat des données provenant d'un autre CMS plus le résultat de son enregistrement dans un message Wordpress pour produire l'élément de menu que je souhaite dans mon menu. Toute aide pour enregistrer le fichier wp_update_nav_menu_item serait très utile. Encore une fois, il s’agit de créer un menu personnalisé sans utiliser le panneau d’administration.

1
Paul
$wpdb->insert( 
    $wpdb->term_relationships, 
    array(
        "object_id" => $thisMenuItem, 
        "term_taxonomy_id" => $menuID
    ), 
    array( "%d", "%d" ) 
);

Cela manquait dans le code de la question.
Il permet aux éléments de menu de se lier au menu de navigation lui-même.

1
Paul

Bien que la réponse de Paul ait été vraiment utile et m'a définitivement mis dans la bonne direction, son code n'a pas vraiment fonctionné pour mon problème.

En gros, la fonction wp_get_nav_menu_object() renvoie l'objet $menu qui possède (entre autres) les propriétés term_id et term_taxonomy_id.

Sur mes clients, WP instance term_id et term_taxonomy_id n'étaient pas les mêmes.

Ce que fait Paul, c’est insérer la propriété term_id dans la table de relations et la lier à la colonne term_taxonomy_id, mais dans mon cas, j’ai dû insérer la propriété term_taxonomy_id à partir de l’objet $menu (et en regardant la dénomination - je crois que c’est correct).

Voici le lien si vous souhaitez vérifier la différence entre term_id et term_taxonomy_id.

En fin de compte, mon code a ressemblé à ceci:

$wpdb->insert(
    $wpdb->term_relationships, 
    array(
        "object_id"        => $menu_item_id, 
        "term_taxonomy_id" => $menu->term_taxonomy_id
    ), 
    array(
        "%d", 
        "%d"
    )
);
1
Andrej