it-swarm.com.de

WP Benutzerdefinierte Menüs Fehler> Menüname existiert bereits?

Ich erhalte einen rätselhaften Fehler, wenn ich im folgenden Code var_dump auf $ menu_id schreibe ...

Zuerst den Testcode, um ein benutzerdefiniertes Menü im Handumdrehen zu erstellen und es einer registrierten Menüposition namens "header-menu" zuzuweisen (erstellt das Menü, weist es jedoch nicht der Menüposition des Themas zu) ...

$menu_id = wp_create_nav_menu('my_test_menu_abc_123');
//var_dump($menu_id);die;
wp_update_nav_menu_item($menu_id, 0, array(
    'menu-item-title' => 'First Menu Item', 
    'menu-item-url' => 'http://mysite.com', 
    'menu-item-status' => 'publish'));
$theme = get_current_theme();
$mods = get_option("mods_$theme");
$mods['nav_menu_locations']['header-menu'] = $menu_id;
update_option("mods_$theme", $mods);

Wenn ich var_dump auf $ menu_id unten, seine Rückkehr ...

object (WP_Error) # 110 (2) {["errors"] => array (1) {["menu_exists"] => array (1) {[0] => string (102) "Der Menüname my_test_menu_abc_123 steht in Konflikt mit Bitte versuchen Sie es mit einem anderen Menünamen. " }} ["error_data"] => array (0) {}}

Es spielt keine Rolle, wie ich das Menü benenne, ich erhalte immer diese Fehlermeldung. Das lässt mich glauben, dass ich einen Fehler in der Logik meines Codes unten habe. Das Menü wird trotzdem erstellt und der Menüeintrag eingefügt. Das Menü kann einfach nicht der Position des Kopfzeilenmenüs des Themas zugewiesen werden.

Irgendwelche Ideen?

Hintergrund : Dank der Hilfe von @ Bainternet habe ich es geschafft, einem ziemlich nahe zu kommen Lösung. Was ich versuche, ist programmgesteuert ein neues benutzerdefiniertes Menü zu erstellen [gelöst] und dieses Menü dann einem der registrierten "Menüpunkte" meines Themas zuzuweisen [ immer noch nicht gelöst - und niemand anderes scheint dazu in der Lage zu sein ], alles über das Skript im Inneren ein Plugin.

Obwohl der obige Code den my_test_menu_test perfekt erstellt, weist er ihn nicht dem "Header-Menü" -Pfad des Themas zu.

Mein erster Hinweis auf ein Problem ist die Tatsache, dass die echo-Anweisung mit dem Code, den ich zum Erstellen des Menüs verwende, in Konflikt zu stehen scheint.

Hier ist eine externe Referenz, die ich verwendet habe ...

http://wordpress.org/support/topic/how-to-assign-a-wordpress-3-menu-to-primary-location-programmatically

Es ist jedoch unklar, ob die Lösung des Autors tatsächlich für irgendjemanden anderen funktioniert (nach meiner Erfahrung und der der anderen Antwortenden auf dem Post) ...

Interessanterweise scheint die Zuordnung eines benutzerdefinierten Navigationsmenüs zu den benutzerdefinierten Menüpositionen eines Themas in der API für benutzerdefinierte Menüs nicht enthalten zu sein ...

1
Scott B

Ich habe den gleichen Fehler erhalten, als ich den Code, den Sie in meiner Funktionsdatei gepostet haben, in ein if eingepackt habe, um ihn nur einmal auszuführen. Ich erhalte die Menü-ID mit get_term_by und weise die Menüposition mit set_theme_mod () zu Eigene Funktion, um einem Ort ein Menü zuzuweisen:

function scotts_set_nav_menu($menu_id,$location){
    $locations = get_theme_mod('nav_menu_locations');
    $locations[$location] = $menu_id;
    set_theme_mod( 'nav_menu_locations', $locations );
}

und Sie können es mit diesem Code versuchen:

$run_once = get_option('menu_check');
if (!$run_once){
    $name = 'test';
    $menu_id = wp_create_nav_menu($name);
    $menu = get_term_by( 'name', $name, 'nav_menu' );
    wp_update_nav_menu_item($menu->term_id, 0, array(
        'menu-item-title' => 'First Menu Item', 
        'menu-item-url' => 'http://mysite.com', 
        'menu-item-status' => 'publish'));
    scotts_set_nav_menu($menu->term_id,'header-menu');
    update_option('menu_check', true);
}

habe es gerade ausprobiert und es funktioniert.

4
Bainternet

Sie brauchen nicht zu tun:

$menu = get_term_by( 'name', $name, 'nav_menu' );
    wp_update_nav_menu_item($menu->term_id, 0, array(
        'menu-item-title' => 'First Menu Item', 
        'menu-item-url' => 'http://mysite.com', 
        'menu-item-status' => 'publish'));

Sie können einfach Folgendes tun:

wp_update_nav_menu_item($menu_id, 0, array(
            'menu-item-title' => 'First Menu Item', 
            'menu-item-url' => 'http://mysite.com', 
            'menu-item-status' => 'publish'));

Ich meine, verwenden Sie die menu_id zurückgegeben, wenn Sie es erstellen.

Trotzdem danke ich für die Lösung

1
chifliiiii