Prevenirea erorii 404 pe arhivele de date goale
Pe o pagină de arhivă după dată, atunci când nu există postări (pentru acea dată), WordPress redirecționează către pagina 404.
Există o modalitate de a face WordPress să continue să utilizeze arhiva originală în loc de pagina 404? În acest fel pot folosi condiția if ( have_posts() )
pentru a afișa un mesaj "Nu s-au găsit postări".

Puteți muta codul din răspunsul OP într-un filtru de șablon 404 și forța WP să încarce fișierul date.php
în loc de 404.php
. Va trimite în continuare antetul 404, dar va rand pagina cu un șablon diferit.
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' );

Bine, la o reconsiderare, nu sunt sigur dacă cer prea mult de la WordPress. Din punct de vedere SEO, chiar vreau ca paginile goale să returneze 404, cu siguranță nu vreau să fie indexate.
Am decis în schimb să folosesc șablonul 404 pentru a afișa mesajul "Nu s-au găsit articole", dar pentru că funcțiile is_date()
, is_day()
(etc.) nu vor funcționa pe pagina 404, am adăugat acest cod pentru a detecta dacă eroarea 404 a fost destinată să fie o arhivă dată.
Lipiți următoarele în 404.php
pentru a detecta URL-ul:
global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
Apoi pot folosi variabila $is_date_archive
pentru a modifica șablonul 404 în consecință.
Exemplu (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 'Nu s-au găsit articole'; } else { echo 'pagină 404 generală'; }
