Reindirizzamenti basati sulla data per post non più esistenti
31 gen 2011, 19:37:14
Visualizzazioni: 337
Voti: 0
Vorrei un modo più elegante per esprimere il seguente reindirizzamento:
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]
Idealmente, vorrei usare wp_safe_redirect
o wp_redirect
. Il problema però è che quelle pagine sono già state eliminate da WordPress.
È possibile farlo internamente, se i post sono stati completamente rimossi dal database?

Dan Gayle
6.15K
Tutte le risposte alla domanda
1
1
Non è un problema che i post siano già stati rimossi, interverremo in WordPress prima che esegua la query sul database. Prima impostiamo le nostre regole di riscrittura, che definiranno una variabile di query speciale (che dobbiamo dichiarare pubblica), e poi, nell'azione parse_request
, controlliamo quella variabile e reindirizziamo se è impostata.
add_action( 'init', 'wpse8236_init' );
function wpse8236_init()
{
// Questo è sensibile alle maiuscole, non possiamo impostare flag regex
// Sostituisci `blog` con `[Bb][Ll][Oo][Gg]` per renderlo insensibile alle maiuscole
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
Domande correlate