Домой WordPress WordPress: Проблемы и решения Убираем таксономию из адресной строки.
2ответ(ов) в теме
lemp
не в сети 1 месяц
На сайте с 21.09.2018
Участник
Тем 23
Сообщения 54
1
08:12

Здравствуйте.
Есть путь:
Ссылка_сайта/каталог/?brand=название_бренда
Нужно привести к такому виду:
Ссылка_сайта/каталог/название_бренда
То есть полностью избавиться от таксономии.
Есть код, который должен решать эту проблему, но он решает ее не совсем корректно. Он убирает название таксономии, а ? и = оставляет.
То есть ссылка становится такого вида:
Ссылка_сайта/каталог/?=название_бренда
Если убрать ?=, то ссылка работает и все хорошо. Но почему-то редирект оставляет ?=.
Как убрать все полностью?
Сам код:

// смена запроса
add_filter('request', 'true_smenit_request', 1, 1 );
 
function true_smenit_request( $query ){
 
	$taxonomia_name = 'brand'; // укажите название таксономии здесь, это также могут быть рубрики category или метки post_tag
 
	// запросы для дочерних элементов будут отличаться, поэтому нам потребуется дополнительная проверка
	if( $query['attachment'] ) :
		$dochernia = true; // эту переменную задаём для себя, она нам потребуется дальше
		$urlyarlyk = $query['attachment']; // это ярлык данного термина/рубрики/метки
	else:
		$dochernia = false;
		$urlyarlyk = $query['name']; // как видите, здесь ярлык хранится в другой переменной запроса
	endif;
 
 
	$termin = get_term_by('slug', $urlyarlyk, $taxonomia_name); // получаем элемент таксономии по ярлыку
 
	if ( isset( $urlyarlyk ) && $termin && !is_wp_error( $termin )): // если такого элемента не существует, прекращаем выполнение кода
 
		// для страниц дочерних элементов код немного отличается
		if( $dochernia ) {
			unset( $query['attachment'] );
			$parent = $termin->parent;
			while( $parent ) {
				$parent_term = get_term( $parent, $taxonomia_name);
				$urlyarlyk = $parent_term->slug . '/' . $urlyarlyk; // нам нужно получить полный путь, состоящий из ярлыка текущего элемента и всех его родителей
				$parent = $parent_term->parent;
			}
		} else {
			unset($query['name']);
		}
 
		switch( $taxonomia_name ): // параметры запроса для рубрик и меток отличаются от других таксономий
			case 'category':{
				$query['category_name'] = $urlyarlyk;
				break;
			}
			case 'post_tag':{
				$query['tag'] = $urlyarlyk;
				break;
			}
			default:{
				$query[$taxonomia_name] = $urlyarlyk;
				break;
			}
		endswitch;
 
	endif;
 
	return $query;
 
}
 
// смена самой ссылки
add_filter( 'term_link', 'true_smena_permalink', 10, 3 );
 
function true_smena_permalink( $url, $term, $taxonomy ){
 
	$taxonomia_name = 'brand'; // название таксономии, тут всё понятно
	$taxonomia_slug = 'brand'; // ярлык таксономии - зависит от параметра rewrite, указанного при создании и может отличаться от названия,
	// как например таксономия меток это post_tag, а ярлык по умолчанию tag
 
	// выходим из функции, если указанного ярлыка таксономии нет в URL или если название таксономии не соответствует
	if ( strpos($url, $taxonomia_slug) === FALSE || $taxonomy != $taxonomia_name ) return $url;
 
	$url = str_replace('/' . $taxonomia_slug, '', $url); // если мы ещё тут, выполняем замену в URL
 
	return $url;
}

Редакции сообщения
15.03.2019 08:13lempПричина: не указано
15.03.2019 08:14lempПричина: не указано
15.03.2019 08:15lempПричина: не указано
15.03.2019 08:20lempПричина: не указано
0
lemp
не в сети 1 месяц
На сайте с 21.09.2018
Участник
Тем 23
Сообщения 54
2
10:51

Закройте тему пожалуйста. Вопрос решен.

0
Тема закрыта. Публикация новых сообщений запрещена.