Есть ли способ, которым я могу жестко закодировать пользовательские пункты меню, когда первая тема установлена? Я создаю тему, которая автоматически сделает некоторые общие страницы при установке. Поэтому мне нужно знать, могу ли я добавить их в пользовательское меню Wordpress, чтобы клиенту не нужно было добавлять их вручную?
Другими словами: как программно вставить / создать пользовательский пункт меню?
Дайте мне знать, если что-то неясно. Руководство по соответствующей странице кодекса приветствуется. Благодарность!
обновление: пробовал код отсюда Ориентация на определенное меню с помощью wp_nav_menu_items
Регистрация в меню:
function register_my_menus() {
register_nav_menus(
array('main-menu' => __( 'Main Menu' ) )
);
}
add_action( 'init', 'register_my_menus' );
Использование шаблона:
<?php wp_nav_menu( array( 'theme_location' => 'main-menu' ) ); ?>
Код для добавления новых предметов:
function new_nav_menu_items($items) {
if( $args->theme_location == 'main-menu' ){
$homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
$items = $homelink . $items;
return $items;
}
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items', 10, 2 );
при добавлении кода для добавления новых пунктов в навигационное меню в functions.php
файле ничего не происходит на странице меню в админ-панели, но текущие пункты меню пропадают на сайте!
Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\citystir\wp-admin\menu.php on line 25
. Но меню создается, и когда страница обновляется, все работает, но вAppearance -> Menu Theme Location
разделе ничего не отображается . Мы очень близки :) Спасибо!$locations = get_theme_mod('nav_menu_locations');
Итак, коды до этого (вставка всего меню выполнена) выполняются, а код после этого (задайте местоположение нужной темы) не выполняются ,Ваш оригинальный код очень близок к деньгам, и я серьезно думаю, что это длинное решение от @Bainternet (без обид) излишне, поэтому взгляните на это:
Ваша единственная проблема состояла в том, что вы не возвращали $ items после того, как функция проверила правильность меню, и вы пропустили второй аргумент обратного вызова, необходимый для проверки ( $ args ).
источник
В Wordpress 3.4.2 есть ошибка:
https://github.com/WordPress/WordPress/commit/ae96b842f9f55ecfb22da705a4902b9d25580259#wp-includes/nav-menu.php
Вам необходимо создать термин отношения вручную:
См. Https://gist.github.com/4148529 пример класса Menu для простого создания меню.
источник
Для информации, текущий пользователь должен получить права на добавление терминов, мои menu_items были созданы, но не добавлены в таблицу wp_terms_relationship, прежде чем я добавлю вызов wp_set_current_user (1);
источник