Получить проблемы с пунктами меню

Вопрос или проблема

Я пытаюсь создать элементы меню из панели администрирования 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="
    '; foreach ( (array) $menu_items as $key => $menu_item ) { $title = $menu_item->title; $url = $menu_item->url; $menu_list .= '
  • ' . $title . '
  • '; } $menu_list .= '
'; } else { $menu_list="
  • Меню \"" . $menu_name . "\" не определено.
"; } // $menu_list теперь готов к выводу echo $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 или к сообществу для более специфической помощи.

Оцените материал
Добавить комментарий

Капча загружается...