Вопрос или проблема
Я работаю над темой с пользовательскими меню, в данный момент использую WP 4.0.1.
Я регистрирую два меню в файле functions.php:
register_nav_menus(
array(
'primary' => __( 'Главное меню', 'wsy' ),
'secondary' => __( 'Вторичное меню', 'wsy' )
)
);
Затем отображаю их в файле header.php:
<nav role="navigation">
<?php
wp_nav_menu(
array(
'theme_location' => 'primary',
'depth' => '1'
)
);
?>
</nav>
Проблема в том, что когда я выбираю конкретное меню на странице Меню или в настраивателе, они перестают отображаться на странице. Не имеет значения, какое меню или какое расположение, они просто не отображаются. Когда я сбрасываю расположения (выбираю “- Выбрать -” из выпадающего списка), отображается меню по умолчанию.
WP_DEBUG активен, ошибок нет. Пробовал с WP 4.1, все еще ничего. Пробовал добавить новые меню, без результата. Пробовал с одним расположением меню и регистрировал с помощью register_nav_menu();
вместо этого — ничего не работает.
Я даже пытался на свежей установке WP, без успеха. Также пробовал без параметра depth, ничего не изменилось.
Я был бы признателен за любую помощь с этим. Спасибо!
Вам также может понадобиться использовать ‘add_theme_support’ для ‘nav-menus’. Смотрите строку 2 ниже:
if ( function_exists('wp_nav_menu') ) {
add_theme_support( 'nav-menus' );
register_nav_menus( array(
'primary' => __( 'Главное меню', 'wsy' ),
'secondary' => __( 'Вторичное меню', 'wsy' )
)
);
}
Затем отображайте ваше меню следующим образом:
$nav_menu = 'primary';
if ( has_nav_menu( $nav_menu ) ) {
echo '<nav role="navigation">';
wp_nav_menu(
array(
'theme_location' => $nav_menu,
'depth' => 1
)
);
echo '</nav>';
}
Ответ или решение
Если функция wp_nav_menu()
не работает в вашей теме WordPress, это может быть связано с несколькими факторами. Давайте разберемся с вашей проблемой шаг за шагом.
- Регистрация меню: Похоже, вы правильно регистрируете меню в файле
functions.php
. Однако важно убедиться, что вы используете функциюadd_theme_support
для поддержки навигационных меню. Убедитесь, что ваш код выглядит следующим образом:
if ( function_exists('wp_nav_menu') ) {
add_theme_support('nav-menus'); // Поддержка навигационных меню
register_nav_menus(array(
'primary' => __( 'Main Menu', 'wsy' ),
'secondary' => __( 'Secondary Menu', 'wsy' ),
));
}
- Отображение меню: Убедитесь, что вы проверяете, назначено ли меню для вашего местоположения, прежде чем выводить его. Это поможет избежать возникновения ситуации, когда меню не показывается даже при корректной регистрации. Вот пример корректного кода для отображения меню в
header.php
:
$nav_menu = 'primary'; // Используйте ключ вашего меню
if ( has_nav_menu($nav_menu) ) {
echo '<nav role="navigation">';
wp_nav_menu(array(
'theme_location' => $nav_menu,
'depth' => 1
));
echo '</nav>';
} else {
echo '<nav role="navigation"><ul><li>Меню не назначено</li></ul></nav>'; // Альтернатива, если меню не назначено
}
-
Проверка назначения меню: Перейдите в админку WordPress, затем в меню "Внешний вид" -> "Меню", и убедитесь, что вы назначили меню для соответствующего местоположения (например, "Главное меню" для
primary
). -
Очистка кеша: Если вы используете плагин кэширования, попробуйте очистить кеш. Иногда изменения не отображаются из-за кэша.
-
Проверка на ошибки: Поскольку у вас активирован
WP_DEBUG
, убедитесь, что в файлеwp-config.php
установлены следующие настройки:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false); // Убедитесь, что ошибки не отображаются на странице
Вы можете просмотреть файлы журнала в /wp-content/debug.log
для поиска возможных ошибок.
-
Конфликт с плагинами или темой: Попробуйте временно отключить все плагины и переключиться на стандартную тему (например, Twenty Twenty-One), чтобы проверить, не конфликтуют ли плагины или ваша тема с функцией
wp_nav_menu()
. -
Обновите WordPress: Поскольку вы используете версию 4.0.1, рассмотрите возможность обновления до последней стабильной версии WordPress, так как многие ошибки и проблемы могут быть исправлены в более поздних версиях.
Если после выполнения всех указанных шагов проблема не решится, вам может помочь более глубокое исследование, включая просмотр настроек вашей темы или конфигурации сервера.