Redirecționări bazate pe dată pentru postări care nu mai există
31 ian. 2011, 19:37:14
Vizualizări: 337
Voturi: 0
Doresc o modalitate mai elegantă de a exprima următoarea redirecționare:
RewriteCond %{REQUEST_URI} ^/blog/2008/(.*) [NC, OR]
RewriteCond %{REQUEST_URI} ^/blog/2009/01/(.*) [NC, OR]
RewriteCond %{REQUEST_URI} ^/blog/2009/02/(.*) [NC, OR]
RewriteCond %{REQUEST_URI} ^/blog/2009/03/(.*) [NC, OR]
RewriteCond %{REQUEST_URI} ^/blog/2009/04/(.*) [NC, OR]
RewriteCond %{REQUEST_URI} ^/blog/2009/05/(.*) [NC, OR]
RewriteCond %{REQUEST_URI} ^/blog/2009/06(.*) [NC]
RewriteRule . http://example.com/blog/? [R=301,L]
În mod ideal, aș dori să folosesc wp_safe_redirect
sau wp_redirect
. Problema este că acele pagini au fost deja șterse din WordPress.
Este posibil să fac acest lucru intern, dacă postările au fost șterse complet din baza de date?

Dan Gayle
6.15K
Toate răspunsurile la întrebare
1
1
Nu este o problemă că postările au dispărut deja, vom interveni înainte ca WordPress să interogheze baza de date. Mai întâi, stabilim regulile noastre de rescriere, care vor seta o variabilă specială de interogare (pe care trebuie să o declarăm publică), apoi, în acțiunea parse_request
, verificăm acea variabilă și redirecționăm dacă este setată.
add_action( 'init', 'wpse8236_init' );
function wpse8236_init()
{
// Aceasta este sensibilă la majuscule, nu putem seta flag-uri regex
// Înlocuiește `blog` cu `[Bb][Ll][Oo][Gg]` pentru a o face insensibilă la majuscule
add_rewrite_rule( 'blog/2008/', 'index.php?wpse8236_redirect=true', 'top' );
add_rewrite_rule( 'blog/2009/0[1-6]/', 'index.php?wpse8236_redirect=true', 'top' );
}
add_action( 'query_vars', 'wpse8236_query_vars' );
function wpse8236_query_vars( $query_vars )
{
$query_vars[] = 'wpse8236_redirect';
return $query_vars;
}
add_action( 'parse_request', 'wpse8236_parse_request' );
function wpse8236_parse_request( &$wp )
{
if ( array_key_exists( 'wpse8236_redirect', $wp->query_vars ) ) {
wp_redirect( '/blog/' );
exit();
}

Jan Fabry
30.5K
9 feb. 2011 14:17:30
Întrebări similare
1
răspunsuri