Prevenire l'errore 404 sugli archivi di date vuoti
Su una pagina di archivio per data quando non esistono articoli (per quella data) WordPress reindirizza alla pagina 404.
Esiste un modo per fare in modo che WordPress continui a utilizzare l'archivio originale invece della 404? In questo modo potrei usare la condizione if ( have_posts() )
per mostrare un messaggio "Nessun articolo trovato".

Puoi spostare il codice dalla risposta dell'OP in un filtro per il template 404 e forzare WP a caricare il file date.php
invece di 404.php
. Invierà comunque l'header 404, ma renderizzerà la pagina con un template diverso.
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' );

Ok, riflettendoci non sono sicuro di star chiedendo troppo a WordPress. Da un punto di vista SEO voglio che le pagine vuote restituiscano un 404, di certo non voglio che vengano indicizzate.
Ho deciso invece di utilizzare il template 404 per mostrare il messaggio "Nessun articolo trovato", ma poiché le funzioni is_date()
, is_day()
(e simili) non funzioneranno nella pagina 404, ho aggiunto questo codice per rilevare se il 404 era destinato a essere un archivio data.
Incolla il seguente nel tuo 404.php
per rilevare l'URL:
global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
Posso quindi usare la variabile $is_date_archive
per modificare di conseguenza il template 404.
Esempio (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 'Nessun articolo trovato'; } else { echo 'pagina 404 generica'; }
