@dev_b

Wordpress ЧПУ из GET параметров?

Приветствую, товарищи.

Имеется ссылка вида - /catalog/platforms/android/oreo/?p_from=100&p_to=1000&country=russia&style=all&type=all
Подскажите как привести ее к такому виду - /catalog/platforms/android/oreo/100/1000/russia/all/all

Через add_rewrite_rule пробовал сделать, но URL не меняется, просто переходит по ссылке с GET параметрами.

add_action('init', 'do_rewrite');
function do_rewrite(){
	add_rewrite_rule( '([\w]+)=([\w+,.-]+)', 'index.php?pagename=catalog&p_from=$matches[1]&p_to=$matches[2]&country=$matches[3]&style=$matches[4]&type=$matches[5]', 'top' );

	add_filter( 'query_vars', function( $vars ){
		$vars[] = 'p_from';
		$vars[] = 'p_to';
		$vars[] = 'country';
		$vars[] = 'style';
		$vars[] = 'type';
		return $vars;
	} );
}


Буду признателен за любые советы куда "копать". Целый день бьюсь над этим вопросом.
  • Вопрос задан
  • 893 просмотра
Пригласить эксперта
Ответы на вопрос 1
orlov0562
@orlov0562
I'm cool!
Формат тут такой
add_rewrite_rule( '<регулярка>', '<редирект>', 'top' );


в регулярке у тебя должно быть
/catalog/platforms/android/oreo/100/1000/russia/all/all


выглядеть это будет так
catalog/platforms/([^/]+)/([^/]+)/(\d+)/(\d+)/([^/]+)/([^/]+)/([^/]+)

соответственно получишь такие карманы
$matches[0] = /catalog/platforms/android/oreo/100/1000/russia/all/all
$matches[1] = android ; регулярка ([^/]+)
$matches[2] = oreo ; регулярка ([^/]+)
$matches[3] = 100 ; регулярка (\d+)
$matches[4] = 1000 ; регулярка (\d+)
$matches[5] = russia ; регулярка ([^/]+)
$matches[6] = all ; регулярка ([^/]+)
$matches[7] = all ; регулярка ([^/]+)


теперь используешь эти карманы в замене
index.php?pagename=catalog&p_from=$matches[3]&p_to=$matches[4]&country=$matches[5]&style=$matches[6]&type=$matches[7]

в итоге url должен после редиректа получится такой
index.php?pagename=catalog&p_from=100&p_to=1000&country=russia&style=all&type=all

* обрати внимание что android и oreo в url не попали, тебе их при необходимости надо добавить согласно твоих параметров

Итоговое выражение для редиректа
add_rewrite_rule(
 'catalog/platforms/([^/]+)/([^/]+)/(\d+)/(\d+)/([^/]+)/([^/]+)/([^/]+)', 
 'index.php?pagename=catalog&p_from=$matches[3]&p_to=$matches[4]&country=$matches[5]&style=$matches[6]&type=$matches[7]', 
 'top' 
);

После того, как сохранишь, надо сходить в админку, в раздел "Настройки - Постоянные ссылки" и нажать кнопку [Сохранить изменения]

Затем надо открыть .htaccess и убедиться что создалось корректное правило.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы