WordPress как на ладони
rgbcode is looking for WordPress developers.

Woocommerce: Как избавиться от get параметров в url после выбора значений фильра?

Наткнулся на вашу статью про get rewrite rule. Но мне не хватает ума приспособить ее к решению своей проблемы. Подскажите пожалуйста.

У меня есть сайт на WordPress. В нём используется Woocommerce. Все товары, загружены и созданы атрибуты.

Когда пользователь открывает страницу каталога и выбирает значения фильтров возникают проблемы с url.

Например, пользователь открывает страницу каталога, выбирает категорию товара, устанавливает фильтр Атрибут 1 «Имя 1 Атрибута 1»

Ссылка выглядит вот так:

https://мойсайт.ру/shop/Категория/?filter_Атрибут 1= Имя атрибута 1

А нужно, чтобы она выглядела так

https://мойсайт.ру/shop/Категория/Категория-какой-то постоянный текст-Имя атрибута 1

Как это исправить?

Заметки к вопросу:
Dan Zakirov 2 месяца назад

На вуке по разному, в некоторых случаях даже в админке настроить можно. А какой фильтр используется? Это штатный фильтр вуки или какой плагин, просто быть может ситуация не такая чтобы юзать get rewrite rule, а можно обойтись более простыми вещами которые уже предусмотрены шаблоном, темой или плагином фильтра

0
Сергей
2 месяца назад
  • 1
    Kama9470

    В ЧПУ ты можешь написать правило, которое будет матчить такой URL. Но тут нужно будет разобраться (не совсем тривиальная задача). По идее как это сделать у меня описано: https://wp-kama.ru/function/wp_rewrite#example_36095

    Но тебе нужно будет посмотреть текущие правила, найти там то которое сейчас обрабатывает УРЛ вида /shop/Категория/ и в твое новое правило добавить теже самые параметры. Также убедиться что твое правило находится выше дефолтного.

    Примерно так может выглядеть твое правило:

    add_filter( 'rewrite_rules_array', 'my_insert_rewrite_rules' );
    add_filter( 'query_vars', 'my_insert_query_vars' );
    
    // Добавляем новое правило
    function my_insert_rewrite_rules( $rules ){
    	$newrules = [
    		'shop/([^/]+)/filter/(.*)/?$' => 'index.php?post_type=shop&taxonomy_name=$matches[1]&attr_filter=$matches[2]'
    	];
    
    	return $newrules + $rules;
    }
    
    // Добавим переменную запроса id в переменные, чтобы WP знал о ней
    function my_insert_query_vars( $vars ){
    	array_push( $vars, 'attr_filter' );
    
    	return $vars;
    }

    В коде значение фильтра получаешь так:

    $filter = get_query_var( 'attr_filter' );

    Тут, еще важно понимать, что тебе всю логику обработки ГЕТ параметра нужно будет переделать под get_query_var( 'attr_filter' ). Ну и изначальное формирование такого урла тоже переделать.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация