Предотвращение ошибки 404 на пустых архивах по дате
На странице архива по дате, когда записи отсутствуют (для этой даты), WordPress перенаправляет на страницу 404.
Есть ли способ заставить WordPress продолжать использовать исходный архив вместо страницы 404? Таким образом, я смогу использовать условие if ( have_posts() )
для вывода сообщения "Записи не найдены".

Вы можете переместить код из ответа OP в фильтр шаблона 404 и заставить WordPress загружать файл date.php
вместо 404.php
. Он по-прежнему будет отправлять заголовок 404, но отображать страницу с другим шаблоном.
function wpd_date_404_template( $template = '' ){
global $wp_query;
if( isset($wp_query->query['year'])
|| isset($wp_query->query['monthnum'])
|| isset($wp_query->query['day']) ){
$template = locate_template( 'date.php', false );
}
return $template;
}
add_filter( '404_template', 'wpd_date_404_template' );

Хорошо, подумав, я не уверен, не слишком ли многого я требую от WordPress. С точки зрения SEO, я определенно хочу, чтобы пустые страницы возвращали 404 ошибку, я точно не хочу, чтобы они индексировались.
Я решил вместо этого использовать шаблон 404 для вывода сообщения "Записи не найдены", но поскольку функции is_date()
, is_day()
и подобные не работают на странице 404, я добавил этот код для определения, была ли 404 ошибка связана с архивом по дате.
Вставьте следующий код в ваш 404.php
для определения URL:
global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
Затем я могу использовать переменную $is_date_archive
для изменения шаблона 404 соответствующим образом.
Пример (404.php
)
global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
if( $is_date_archive ){ echo 'Записи не найдены'; } else { echo 'Общая страница 404'; }
