Перенаправление на основе даты для удаленных записей

31 янв. 2011 г., 19:37:14
Просмотры: 337
Голосов: 0

Мне нужен более элегантный способ выразить следующие перенаправления:

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]

В идеале я хотел бы использовать wp_safe_redirect или wp_redirect. Проблема в том, что эти страницы уже удалены из WordPress.

Возможно ли это сделать внутри WordPress, если записи полностью удалены из базы данных?

0
Все ответы на вопрос 1
1

Нет проблемы в том, что посты уже удалены, мы подключимся к WordPress до того, как он выполнит запрос к базе данных. Сначала мы настроим правила перезаписи URL, которые установят специальную переменную запроса (которую мы должны объявить публичной), а затем в действии parse_request проверим эту переменную и выполним перенаправление, если она установлена.

add_action( 'init', 'wpse8236_init' );
function wpse8236_init()
{
    // Регистр важен, мы не можем установить флаги регулярных выражений
    // Замените `blog` на `[Bb][Ll][Oo][Gg]`, чтобы сделать проверку нечувствительной к регистру
    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 февр. 2011 г. 14:17:30
Комментарии

Отлично! Я даже не думал сделать это таким образом. Очень круто!

Dan Gayle Dan Gayle
10 февр. 2011 г. 21:38:21