@Ivan1331

Вывод записи из таксономии?

Делаю фильтр на основе таксономий, делаю на основе полей - категория товара и цвет, мне нужно как то так подобрать условие запроса, что бы:
1) Если выбрана только 1 поле( или цвет или категория) то выводилось только выбранное поле.
2) Если выбрано 2 поля, то выводились товары у которых эти 2 поля совпали
Вот примерно как я пробовал это сделать, сейчас выводит только если задано 2 поля, если только 1, то ничего не выводит:
$q = new WP_Query([
     'post_type' => 'goods',
     'tax_query' => [
	'relation' => 'OR',
	[
		'relation' => "AND",
		[
			'taxonomy' => 'color',
			'field'    => 'slug',
			'terms'    => $_POST['color']
		],
		[
			'taxonomy' => 'category',
			'field'    => 'slug',
			'terms'    => $_POST['category']
		]
	],
	[
		'relation' => 'OR',
			[
			'taxonomy' => 'color',
			'field'    => 'slug',
			'terms'    => $_POST['color']
			],
			[
			'taxonomy' => 'category',
			'field'    => 'slug',
			'terms'    => $_POST['category']
			]
	]
]
]);
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
'tax_query' — это обычный массив, вы можете добавлять в него значения в зависимости от существования переменных $_POST

$args = [
	'post_type' => 'goods',
];

if ( !empty($_POST['color']) && !empty($_POST['category']) ) {
	$args['tax_query'] = [
		'relation' => 'AND',
		[
			'taxonomy' => 'color',
			'field'    => 'slug',
			'terms'    => $_POST['color']
		],
		[
			'taxonomy' => 'category',
			'field'    => 'slug',
			'terms'    => $_POST['category']
		]
	];
} elseif( !empty($_POST['color']) || !empty($_POST['category']) ) {
	if ( !empty($_POST['color']) ) {
		$args['tax_query'] = [
			[
				'taxonomy' => 'color',
				'field'    => 'slug',
				'terms'    => $_POST['color']
			]
		];
	} else {
		$args['tax_query'] = [
			[
				'taxonomy' => 'category',
				'field'    => 'slug',
				'terms'    => $_POST['category']
			]
		];
	}
}

$query = new WP_Query( $args );


Кстати, 'category' это зарезервированная таксономия для записей. Если вы пользуетесь woocommerce, то там таксономии называются 'product_cat'. Возможно поэтому ваш код и не работает
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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