scottb
  • 0
Гуру

Ошибка пользовательского меню WP > название меню уже существует?

  • 0

Я получаю загадочную ошибку, когда я var_dump на $menu_id в коде ниже…

Во-первых, тестовый код для создания пользовательского меню «на лету» и назначения его зарегистрированному расположению меню под названием «header-menu» (создает меню, но не может назначить его местоположению меню темы)…

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

Когда я var_dump на $menu_id ниже, он возвращается…

object(WP_Error)#110 (2) { [«errors»]=> array(1) { [«menu_exists»]=> array(1) { [0]=> string(102) «Имя меню my_test_menu_abc_123 конфликтует с другое название меню. Попробуйте другое.» } } [«error_data»]=> массив(0) { } }

Неважно, как я называю меню, я всегда получаю эту ошибку. Это заставляет меня поверить, что у меня есть недостаток в логике моего кода ниже. Хотя, он все равно прекрасно создает меню, и вставляет в него пункт меню. Просто не удается назначить меню местоположению меню заголовка темы.

Есть идеи?

Предыстория : благодаря помощи @Bainternet мне удалось довольно близко подойти к решению. Что я пытаюсь сделать, так это программно создать новое пользовательское меню «на лету » [решено], а затем назначить это меню одному из зарегистрированных «местоположений меню» моей темы [ до сих пор не решенои никто другой, похоже, не может сделать это ], все через скрипт внутри плагина.

Тем не менее, несмотря на то, что приведенный выше код идеально создаст my_test_menu_test, он не назначит его местоположению «header-menu» темы.

Мой первый ключ к проблеме — это тот факт, что оператор echo конфликтует с кодом, который я использую для создания меню.

Вот внешняя ссылка, которую я использовал…

http://wordpress.org/support/topic/how-to-assign-a-wordpress-3-menu-to-primary-location-программно

Однако неясно, действительно ли решение автора работает для кого-либо еще (согласно моему опыту и опыту других респондентов на посту)…

Интересно, как некоторые отметили, что назначение пользовательского навигационного меню местам пользовательского меню темы, по-видимому, не включено в API пользовательского меню…

Share
  1. Определенные местоположения меню полностью зависят от темы. Если вы делаете это с помощью плагина, как вы узнаете, какие местоположения меню будут определены для начала?

    • 0
  2. Я получил ту же ошибку, когда поместил код, который вы разместили, в моем файле функций, поэтому я завернул его в if для запуска только один раз, и я получаю идентификатор меню, используя get_term_by, и я назначаю местоположение меню, используя set_theme_mod(), так что вот ваш очень собственная функция для назначения меню местоположению:

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

    и вы можете попробовать это с этим кодом:

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

    только что попробовал, и это работает.

    • 0
  3. Вам не нужно делать:

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

    Вы можете просто сделать:

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

    Я имею в виду использование menu_id, возвращаемого при его создании.

    В любом случае, спасибо за решение, я все еще не могу проголосовать за

    • 0

Оставить ответ

You must login to add an answer.