Prevenire l'errore 404 sugli archivi di date vuoti

2 lug 2013, 14:36:56
Visualizzazioni: 2.71K
Voti: 4

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".

0
Tutte le risposte alla domanda 2
0

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' );
23 apr 2014 09:08:29
0

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'; }
2 lug 2013 15:24:12