Перенаправление на основе даты для удаленных записей
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, если записи полностью удалены из базы данных?

Dan Gayle
6.15K
Все ответы на вопрос
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();
}

Jan Fabry
30.5K
9 февр. 2011 г. 14:17:30
Похожие вопросы
1
ответов