Redirecciones basadas en fechas para posts que ya no existen

31 ene 2011, 19:37:14
Vistas: 337
Votos: 0

Quiero una forma más elegante de expresar la siguiente redirección:

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, me gustaría usar wp_safe_redirect o wp_redirect. El problema con esto, sin embargo, es que esas páginas ya han sido eliminadas desde WP.

¿Es posible hacer esto internamente, si los posts han sido eliminados completamente de la base de datos?

0
Todas las respuestas a la pregunta 1
1

No hay problema que las publicaciones ya no estén, nos conectaremos a WP antes de que consulte la base de datos. Primero configuramos nuestras reglas de reescritura, que establecerán una variable de consulta especial (que debemos declarar como pública), y luego, en la acción parse_request, verificamos esa variable y redirigimos si está establecida.

add_action( 'init', 'wpse8236_init' );
function wpse8236_init()
{
    // Esto distingue entre mayúsculas y minúsculas, no podemos establecer flags de regex
    // Reemplazar `blog` con `[Bb][Ll][Oo][Gg]` para hacerlo insensible a mayúsculas/minúsculas
    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();
    }
9 feb 2011 14:17:30
Comentarios

¡Increíble! No había pensado en hacerlo de esa manera. ¡Muy genial!

Dan Gayle Dan Gayle
10 feb 2011 21:38:21