WP_Query не позволяет проводить сравнение LIKE
для поиска по таксономии, поэтому вам нужно будет выполнить 2 шага:
- Сначала получить список всех слагов, которые частично соответствуют ваш поисковый запрос.
- Затем используйте этот список в вашем
tax_query
для поиска всех слагов, которые точно соответствуют слагам в этом списке.
1. Получить все краткие совпадения, которые частично совпадают
Используйте get_terms
, чтобы получить список всех терминов, которые включают ваш поисковый запрос $search_data
.
Вам не нужно регулярное выражение - get_terms
уже имеет аргумент name__like
, который будет выполнять частичное совпадение вместо полного совпадения.
$matching_terms = get_terms( array(
'taxonomy' => 'pa_version',
'fields' => 'slugs', // searches in the slug and returns an array of matching slugs
'name__like' => $search_data,
) );
Это вернет массив всех слагов, которые частично соответствуют вашему поисковому запросу, например ('4000342', 'XC-KK-4000342-8', '123440003425')
.
( Примечание: get_terms
не возвращает пустые термины по умолчанию. Если вы хотите включить пустые термины, вы можете включить 'hide_empty' => false
в аргументы.)
2. Используйте это в своем tax_query
для поиска всех слагов, которые есть в этом списке
$args = array (
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'pa_version',
'field' => 'slug',
'terms' => $matching_terms
)
),
);
Подробнее об этом и других параметрах WP__Term_Query можно узнать здесь , которые можно передать в get_terms