@vadim023

ЧПУ WordPress конфликтует с кастомным ,как исправить?

Проблема вот в чем, есть страница Биографий со своим шаблоном в ней по гет параметру ID производится поиск человека из базы и все хорошо работает, но вид ссылки site.ru/biography?id=42 смотрится не очень, я добавил в файл .htaccess правило для mod_rewrite
...
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^biography/([^/\.]+)/?$ biography/?id=$1 [L]
...

Оно работает прекрасно если воодить цифры site.ru/biography/4 , Но когда вводятся символы, допустим site.ru/biography/a , то тут уже срабатывает Wordpress`овский редирект и он ищет запись которая начинается с символа a.
Как мне отключить этот поиск(редирект) для данного примера?
  • Вопрос задан
  • 649 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ShamblerR
вопервых у вас редирект с гет параметром а он не передается таким способом вообще, дял редиректа с гет испльзуется двухуровневая конструкция. Где вы можите исключить в добавок все что вам потреюуется.
Ответ написан
@berlevdv
Возможно криво, но смог решить, помогла статья

Необходимо переназначить Rewrite:
add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_filter( 'query_vars','my_insert_query_vars' );
add_action( 'wp_loaded','my_flush_rules' );

// Сбиваем правила flush_rules(), если наших еще нет в списке (операция ресурсоемкая, поэтому не стоит ее делать каждый раз)
function my_flush_rules(){
    $rules = get_option( 'rewrite_rules' );

    // достаточно проверить, есть ли в списке хотя бы одно из наших правил
    if ( ! isset( $rules['biography/([^/]*)/?$'] ) ) {
            global $wp_rewrite;
            $wp_rewrite->flush_rules();
    }
}

// Добавляем наши правила
function my_insert_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules['biography/([^/]*)/?$'] = 'index.php?pagename=biography';
    return $newrules + $rules; // так оно добавляет наши правила к уже существующим, а еще мы можем тупо убрать все и вернуть только свой список, сделав return $newrules;
}

// Добавляем переменную id, чтобы WP воспринимал ее
function my_insert_query_vars( $vars )
{
    array_push($vars, 'id');
    return $vars;
}


Теперь будут открываться страницы типа site.ru/biography/a/

Далее необходимо в коде обрабатывать полученную ЧПУ (я так сделал, ибо не понял как ещё можно параметры передать), в этом мне помогла статья:

P.S.: Я совсем не программист и досконально не разбирался, по-этому в коде может быть лишнее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы