Justik99
@Justik99
Изучаю WordPress путем поломок своей психики!

Как связать 2 таксономии?

Всем добрый день. Такая ситуация. Пытаюсь объединить 2 таксономии на выводе, но не могу понять как сделать это.

Как хочется реализовать:
Есть список брендов (одна таксономия), есть категории техники (вторая таксономия)

Разные точки входа
///
Вариант 1.
Человек попадает на страницу категории, допустим "веники"
У него в заголовке пишется "ремонт веников" и дальше идет список брендов
После выбора бренда, допустим "Русь", он попадает на страницу "ремонт веников Русь"
///
Вариант 2.
Человек попадает на страницу бренда, допустим "Русь"
У него в заголовке пишется "ремонт техники Русь" и дальше идет список категорий техники
После выбора категории, допустим "молотки", он попадает на страницу "ремонт молотков Русь"
///

Т.е. как связать это все без создания 100500 страниц я не пока не знаю как.
Вариант, что в каждую категорию добавить список брендов или в каждый бренд список категорий, это не вариант. Потому, что брендов более 100 может быть у каждого, как и категорий техники может у каждого бренда может быть уйма.

Может кто что подскажет?
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Обычно это делается через гет-запросы. Например у вас ссылка /repair/?brand=rus, на хуке pre_get_posts проверяете таксономию и гет-переменную и фильтруете записи для вывода

Для корректной работы переменную нужно зарегистрировать, если ее нет

add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $qvars ) {
	$qvars[] = 'brand';
	return $qvars;
}


Добавить в ссылку гет-переменную можно с помощью функции add_query_arg()

$link = add_query_arg( [ 'brand' => 'rus' ], $cur_link );


Получить гет-запрос можно с помощью get_query_var() и отфильтровать по примеру

add_action( 'pre_get_posts', 'filter_pre_get_posts', 1 );
function filter_pre_get_posts( $query ) {

	// Выходим, если это админ-панель или не основной запрос
	if ( is_admin() || ! $query->is_main_query() ) {
		return;
	}

	// Выбираем записи с GET запросами brand
	if ( $query->is_tax( 'repair' ) && get_query_var( 'brand', false ) ) {
		
		$tax_query = [];

		$tax_query['tax_query'][] = [
			'taxonomy' => 'brands',
			'field' => 'slug',
			'terms' => get_query_var( 'brand', false ),
		];

		$query->set( 'tax_query', $tax_query );

	}

}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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