Woocommerce: Как избавиться от get параметров в url после выбора значений фильра?
Наткнулся на вашу статью про get rewrite rule. Но мне не хватает ума приспособить ее к решению своей проблемы. Подскажите пожалуйста.
У меня есть сайт на WordPress. В нём используется Woocommerce. Все товары, загружены и созданы атрибуты.
Когда пользователь открывает страницу каталога и выбирает значения фильтров возникают проблемы с url.
Например, пользователь открывает страницу каталога, выбирает категорию товара, устанавливает фильтр Атрибут 1 «Имя 1 Атрибута 1»
Ссылка выглядит вот так:
https://мойсайт.ру/shop/Категория/?filter_Атрибут 1= Имя атрибута 1
А нужно, чтобы она выглядела так
https://мойсайт.ру/shop/Категория/Категория-какой-то постоянный текст-Имя атрибута 1
Как это исправить?
На вуке по разному, в некоторых случаях даже в админке настроить можно. А какой фильтр используется? Это штатный фильтр вуки или какой плагин, просто быть может ситуация не такая чтобы юзать get rewrite rule, а можно обойтись более простыми вещами которые уже предусмотрены шаблоном, темой или плагином фильтра
В ЧПУ ты можешь написать правило, которое будет матчить такой 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; }В коде значение фильтра получаешь так:
Тут, еще важно понимать, что тебе всю логику обработки ГЕТ параметра нужно будет переделать под
get_query_var( 'attr_filter' ). Ну и изначальное формирование такого урла тоже переделать.