Пользовательское меню создается с дефолтными страницами, но не привязывается к кастомной локации меню в теме

7 апр. 2011 г., 00:06:56
Просмотры: 1.65K
Голосов: 0

Скрипт ниже создает навигационное меню и добавляет в него страницу. Все работает отлично, за исключением того, что меню не привязывается автоматически к локации "Header-menu" в моей теме.

Есть идеи, почему так происходит?

//Регистрируем локации меню для темы
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
  register_nav_menus(
    array('header-menu' => __( 'Header Menu' ), 'footer-menu' => __( 'Footer Menu' ))
  );
}

//Создаем меню, добавляем страницу и пытаемся привязать к локации "header-menu"
$menu_id = wp_create_nav_menu( 'header-menu' );
$menu = array( 
    'menu-item-type' => 'custom', 
    'menu-item-url' => get_home_url('/'),
    'menu-item-title' => 'Home', 
    'menu-item-status' => 'publish', 
    'theme_location' => 'header-menu', //Просто предположение, но не сработало!!!
    );
wp_update_nav_menu_item( $menu_id, 0, $menu );
0
Все ответы на вопрос 1
2

Функция wp_create_nav_menu() принимает название меню, а не расположение меню. Что касается wp_update_menu_item(), то она предназначена для элементов меню, а не для самого меню. Покопавшись в коде, я выяснил, что "назначение" расположения меню ('theme location') в теме не выполняется с помощью API nav_menu в WordPress, а осуществляется через настройки темы:

// сначала получаем текущую тему
$theme = get_current_theme();
// получаем модификации темы
$mods = get_option("mods_$theme");
// обновляем модификации, добавляя ID меню для расположения в теме
$mods['nav_menu_locations']['header-menu'] = $menu_id;
update_option("mods_$theme", $mods);

Надеюсь, это поможет :)

7 апр. 2011 г. 02:48:25
Комментарии

Ты просто суперзвезда. Неудивительно, что я не мог это найти. Если бы у меня была кнопка +20, я бы жал на нее изо всех сил.

Scott B Scott B
7 апр. 2011 г. 03:56:00

твой совет значительно приблизил меня к решению, и я выбираю его как ответ. Однако меню все еще не назначается в выбранное расположение. Я получаю ошибки трассировки о том, что $menu_id уже существует. Поэтому я задаю это как отдельный вопрос.

Scott B Scott B
7 апр. 2011 г. 19:05:35