Intereting Posts
get_query_var ('s') не работает «Ответ на адрес» Email Добавление поля короткого кода для редактирования галереи / Настройки галереи Можно ли экспортировать WordPress из командной строки? Как перейти к недавно опубликованному комментарию после отправки? Получить контент на странице блога Как получить имена категорий в post_class? что-то вроде is_childtheme () Выберите должности, у которых нет отношений в пользовательской таксономии Задержка резервного копирования WordPress по HTTP-запросу на стороне сервера Поиск выделенного изображения, затем для первого изображения, затем для миниатюры видео Предварительный просмотр пути изображения в разделе администратора Дифференциальная форма регистрации для врача и пациента Можно ли удалить это действие? (поскольку он добавлен непосредственно перед его вызовом) Постоянная ссылка Пользовательская структура и базовый номер категории

Почему у меня есть странная проблема с рендерингом только на 404.php, вызванная wp_nav_menu?

Я создал меню навигации, используя встроенный редактор меню в WordPress 3. Это код, который я использую для его отображения:

<?php wp_nav_menu( array('menu' => 'Main Navigation','menu_id'=> 'headernav','menu_class'=>'navigate')); ?> 

Он отображает именно то, что я ожидал бы на каждой странице, кроме 404.php. Вот как это делает везде:

 <div class="menu-main-navigation-container"><ul id="headernav" class="navigate"> 

и это то, как он делает на 404.php:

 <div class="navigate"><ul> 

И на 404.php он перечисляет каждую страницу на моем сайте, а не те, которые я встроил в меню.

Кто-нибудь знает, почему это происходит? Любая помощь приветствуется.

РЕДАКТИРОВАТЬ

Вот код из моего файла functions.php:

 function mytheme_setup() { register_nav_menus( array( 'main-navigation' => 'Main Navigation', 'subnav-navigation' => 'Sub menu nav', 'how-eli-works-nav' => 'How Eli Works' ) ); } add_action( 'after_setup_theme', 'mytheme_setup' ); 

Я также сделал то, что вы предложили, и вернулся в панель «Меню» и назначил тематические локации. Тот же результат: все работает там, где они делали раньше, и 404.php все еще сломан.

Это код, вызывающий меню из моего файла header.php:

 <?php wp_nav_menu( array('theme_location' => 'main-navigation', 'menu' => 'Main Navigation','menu_id'=> 'headernav','menu_class'=>'navigate')); ?> 

И это код из моего файла 404.php:

 <?php get_header(); ?> <div id="pagecontent" class="narrowcolumn" role="main"> <article id="post-0" class="post error404 not-found"> <header class="entry-header"> <h1 class="entry-title"><?php _e( 'Oops, we couldn&rsquo;t find what you requested.', 'twentyeleven' ); ?></h1> </header> <div class="entry-content"> <p><?php _e( 'It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps searching, or one of the links below, can help.', 'twentyeleven' ); ?></p> <?php get_search_form(); ?> <?php the_widget( 'WP_Widget_Recent_Posts', array( 'number' => 10 ), array( 'widget_id' => '404' ) ); ?> <div class="widget"> <h2 class="widgettitle"><?php _e( 'Most Used Categories', 'twentyeleven' ); ?></h2> <ul> <?php wp_list_categories( array( 'orderby' => 'count', 'order' => 'DESC', 'show_count' => 1, 'title_li' => '', 'number' => 10 ) ); ?> </ul> </div> </div> <?php get_footer(); ?> 

Я не уверен, что это вызовет вашу проблему, но один из способов, которым вы определенно делаете это неправильно , ссылается на menu вместо theme_location при вызове wp_nav_menu() .

Предположим, вы зарегистрировали свое меню как «главную навигацию» в functions.php , например:

 register_nav_menus( array( 'main-navigation' => 'Main Navigation', 'secondary-navigation' => 'Secondary Navigation' ) ); 

… тогда ваш wp_nav_menu() должен ссылаться на эту зарегистрированную theme_location :

 wp_nav_menu( array( 'theme_location' => 'main-navigation', 'menu_id'=> 'headernav', 'menu_class'=>'navigate' ) ); 

Не существует неотъемлемой причины того, что страница шаблона ошибки 404 должна выводить навигационное меню любым другим способом, чем любой другой шаблон. Если вышеуказанное не устраняет проблему, нам нужно будет увидеть больше вашей разметки 404.php , чтобы диагностировать проблему.

РЕДАКТИРОВАТЬ

Хорошо, я попробовал зарегистрировать его, и это имело эффект: теперь меню просто не регистрируется.

Можете ли вы обновить свой ответ и опубликовать свой код register_nav_menus() ?

Примечание: убедитесь, что вызов этой функции подключен к after_setup_theme ; он обычно переходит в функцию theme_setup() , подключенную к after_setup_theme , например:

 function mytheme_setup() { // Register Nav Menu Locations register_nav_menus( array( 'main-navigation' => 'Main Navigation', 'secondary-navigation' => 'Secondary Navigation' ) ); // Other Theme-setup functions may go here } add_action( 'after_setup_theme', 'mytheme_setup' ); 

Итак, разместите этот код в своем ответе.

Кроме того, после того, как вы зарегистрировали свои тематические местоположения , вам нужно зайти в Dashboard -> Appearance -> Menus и убедиться, что вы применили свое пользовательское меню к соответствующему тематическому местоположению .

EDIT 2

Это код, вызывающий меню из моего файла header.php:

 <?php wp_nav_menu( array('theme_location' => 'main-navigation', 'menu' => 'Main Navigation','menu_id'=> 'headernav','menu_class'=>'navigate')); ?> 

Вы все еще menu_id параметры menu и menu_id в wp_nav_menu() .

Зачем ты это делаешь? Как я сказал выше, это « Делать это неправильно» . Вам нужно передать только параметр wp_nav_menu() в wp_nav_menu() . Затем WordPress применяет любое меню, назначенное через Dashboard -> Appearance -> Menus .

И это код из моего файла 404.php:

Я не уверен, что это связано, но ваша разметка HTML неверна. У вас есть открывающий <article> и не соответствующий, закрывающий </article> .

Это не ответ обязательно, но после нескольких исследований я нашел эти темы:

http://wordpress.org/support/topic/custom-menu-not-displaying-on-404-error-page

http://www.prettyscripts.com/software/wordpress/wordpress-custom-menu-not-displayed-on-404-page

Существует некоторый конфликт или ошибка, из-за которой пользовательские меню не отображаются правильно на 404 страницах. Изменение постоянных ссылок, чтобы не использовать какие-либо числа (например, /% category% /% postname% /) заставляет меню отображать правильно.

Надеюсь, что-то они исправят в предстоящем выпуске: /