Prevenir error 404 en archivos de fechas vacíos
En una página de archivo por fecha cuando no existen publicaciones (para esa fecha), WordPress redirige a la página 404.
¿Existe alguna manera de hacer que WordPress continúe usando el archivo original en lugar del 404? De esa forma puedo usar la condición if ( have_posts() )
para mostrar un mensaje "No se encontraron publicaciones".
Puedes mover el código de la respuesta del OP a un filtro de plantilla 404 y forzar a WP a cargar el archivo date.php
en lugar de 404.php
. Aún enviará el encabezado 404, pero renderizará la página con una plantilla diferente.
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' );

De acuerdo, al reflexionar no estoy seguro si estoy pidiendo demasiado a WordPress. Desde el punto de vista de SEO, definitivamente quiero que las páginas vacías devuelvan un 404, no quiero que se indexen.
Decidí en su lugar usar la plantilla 404 para mostrar el mensaje "No se encontraron publicaciones", pero debido a que las funciones is_date()
, is_day()
(etc.) no funcionarán en la página 404, agregué este código para detectar si el 404 estaba destinado a ser un archivo de fecha.
Pega lo siguiente en tu 404.php
para detectar la URL:
global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
Luego puedo usar la variable $is_date_archive
para modificar la plantilla 404 según corresponda.
Ejemplo (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 'No se encontraron publicaciones'; } else { echo 'página 404 genérica'; }
