Вопрос или проблема
Я пытаюсь создать элементы меню из панели администрирования WordPress.
Для этого я следовал инструкциям на codex:
http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items
// Получаем навигационное меню на основе $menu_name (так же, как 'theme_location' или 'menu' аргумент для wp_nav_menu)
// Этот код основан на коде wp_nav_menu для получения ID меню из слага меню
$menu_name="custom_menu_slug";
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menu_list="- Меню \"" . $menu_name . "\" не определено.
";
}
// $menu_list теперь готов к выводу
echo $menu_list;
';
} else {
$menu_list="
Но я всегда получаю ошибку: Меню “cs-1-language” не определено.
Я пробовал с именем и слугом и разными меню, но я всегда нахожу эту ошибку.
Кто-нибудь знает, что я делаю не так или есть ли другой способ перечислить элементы меню?
Спасибо!
Я пробовал с именем и слугом и разными меню, но я всегда
нахожу эту ошибку.
Вы пробовали с слагом местоположения? Посмотрите, где определено местоположение вашего меню (functions.php), например:
register_nav_menus( array(
'primary' => __( 'Основное меню', 'mytheme' ),
) );
На странице Внешний вид -> Меню назначьте ваше меню этому местоположению.
А затем запустите ваш код, начиная с:
$menu_name="primary";
Спасибо за вашу помощь
Вы пробовали с слагом местоположения? Посмотрите, где определено местоположение вашего меню (functions.php)
Да, я использовал эту функцию для преобразования имени меню в слуг, но те же результаты…
function wp_menu_id_by_name( $name ) {
$menus = get_terms( 'nav_menu' );
foreach ( $menus as $menu ) {
if( $name === $menu->name ) {
return $menu->slug;
}
}
return false;
}
Я создал меню в панели меню (внешний вид -> меню), а не в functions.php
Я пытался создать в functions.php, но меню не отображаются в панели меню 🙁
Вот еще один способ получить элементы меню.
Если вы находитесь в админке WordPress и редактируете свое меню, если вы наведете курсор на ссылку “удалить меню”, вы увидите ID вашего меню в URL. Вы можете получить меню по ID:
<?php
$menuID = '12'; // ID вашего меню
$primaryNav = wp_get_nav_menu_items($menuID); // получаем элементы вашего меню
?>
Таким образом, вы получаете все элементы в меню. Затем вы можете перебрать их с помощью чего-то вроде:
<ul>
<?php
foreach( $primaryNav as $item ) {
$link = $item->url; // получаем URL элемента
$title = $item->title; // получаем название элемента
?>
<li class="item"><a href="https://wordpress.stackexchange.com/questions/179054/<?php echo $link; ?>"><?php echo $title; ?></a></li>
<?php } ?>
</ul>
Ответ или решение
Проблема получения элементов меню в WordPress может возникнуть по нескольким причинам. В данной ситуации вы уже попробовали несколько подходов, но по-прежнему получаете сообщение об ошибке: «Меню "cs-1-language" не определено». Давайте более подробно рассмотрим ваши действия и предложим возможные решения.
1. Проверка определения меню
Сначала убедитесь, что меню действительно создано и привязано к правильному местоположению в админ-панели WordPress:
- Перейдите в раздел Внешний вид -> Меню.
- Убедитесь, что ваше меню (например, "cs-1-language") создано и существует в этом списке.
- Проверьте, что ваше меню привязано к соответствующему местоположению навигации (например, Primary Menu или любое другое, которое вы определили в
functions.php
).
2. Проверка кода в functions.php
В коде functions.php
убедитесь, что вы зарегистрировали правильные меню. Например:
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'mytheme' ),
'footer' => __( 'Footer Menu', 'mytheme' ),
) );
После этого вернитесь в раздел Внешний вид -> Меню и свяжите созданное меню с соответствующей локацией.
3. Правильное использование wp_get_nav_menu_locations()
Обратите внимание, что при использовании функции wp_get_nav_menu_locations()
вам необходимо использовать правильный ключ для получения местоположения меню. Например, если вы регистрировали меню с ключом ‘primary’, ваш код должен выглядеть так:
$menu_name = "primary"; // Здесь используйте правильный ключ
4. Получение меню по идентификатору
Если вы не можете решить проблему через название или слаг меню, попробуйте получить меню по его идентификатору. В админ-панели WordPress, наведя курсор на ссылку «Удалить меню», вы можете увидеть его идентификатор в URL. Используйте этот идентификатор для получения элементов меню:
$menuID = '12'; // Здесь используйте настоящий ID вашего меню
$menu_items = wp_get_nav_menu_items($menuID);
$menu_list = '<ul id="menu-custom">';
foreach ($menu_items as $item) {
$title = $item->title;
$url = $item->url;
$menu_list .= '<li><a href="' . esc_url($url) . '">' . esc_html($title) . '</a></li>';
}
$menu_list .= '</ul>';
echo $menu_list;
5. Вызов функции для проверки доступности меню
Если вы хотите определить, существует ли меню с указанным слагом, вы можете использовать следующий код:
function menu_exists($slug) {
$locations = get_nav_menu_locations();
return isset($locations[$slug]);
}
if (menu_exists($menu_name)) {
// Ваш код получения меню
} else {
echo '<ul><li>Меню "' . esc_html($menu_name) . '" не определено.</li></ul>';
}
Заключение
Если после всех этих шагов ошибка все еще присутствует, возможно, стоит проверить наличие конфликтов с другими плагинами или темами. Также убедитесь, что у вас последняя версия WordPress и установленных плагинов. В случае необходимости, вы можете обратиться в техподдержку WordPress или к сообществу для более специфической помощи.