Фильтр tax_query по термину, начинающемуся с символа

Я пытаюсь отфильтровать tax_query по термину, начинающемуся с некоторых символов (например, STAxxxx) в WordPress WP_Query.

Предположим, у меня есть следующая информация, хранящаяся в администраторе WordPress: Тип сообщения: продукт, Таксономия: бренд, Термины, доступные для бренда: Adidas, Reebok, Puma, Nike. , Асикс и т.д.

Если пользователь вводит «а» в текстовое поле бренда, бренды, начинающиеся с «а», должны заполниться.

Я пробовал ниже фрагмент, но это не сработало:

'taxonomy' => 'brand',
'field' => 'slug',
'terms' => $brand_name_field, '%',
'operator' => 'LIKE'

person Ramiz Manked    schedule 14.10.2018    source источник
comment
Нужно ли получать продукты или бренды, когда пользователь вводит «а» в текстовое поле бренда? Если вы хотите получить бренды таксономии, вы должны использовать не WP_Query, а get_terms. WP_Query используется для получения сообщений определенного типа, а get_terms используется для получения всех терминов определенной таксономии.   -  person Omar Tanti    schedule 14.10.2018


Ответы (2)


Омар, я был в мини-отпуске, поэтому не мог ответить на твой ответ. Я прошу прощения за это.

Ни одно из ваших предложений не сработало для меня. Затем я больше исследовал переполнение стека и нашел полезные ссылки, которые сработали для меня.

https://stackoverflow.com/a/29994568/5196594

Спасибо

person Ramiz Manked    schedule 23.10.2018

Если вам просто нужны продукты без выбора брендов, я обновил ваш код до следующего (но обратите внимание, что все бренды, содержащие «а» в своем названии, не обязательно начинаются с «а»):

'taxonomy' => 'brand',
'field' => 'name',
'terms' => $brand_name_field
'operator' => 'LIKE'

Если необходимо начинать с буквы «а», я бы посоветовал вам выполнять запрос после того, как пользователь введет как минимум 2 или 3 символа, чтобы уменьшить вероятность получения ненужных брендов.


Если вы хотите получить только бренды, названия которых начинаются с «а», вам не следует использовать WP_Query, вам нужно использовать get_terms() с набором аргументов name__like.

Следующее поможет:

$brands = get_terms([
  'taxonomy' => 'brand',
  'name__like' => 'a' //you can use a variable in your case $search
  'fields' => 'ids' //If you cant to fetch all term data use 'all'
]);

Обратите внимание, что при этом не будут получены бренды, начинающиеся с «а», но будут получены все бренды, которые содержат «а», поэтому будут выбраны Adidas, Puma и Asics. Это было изменено в WordPress 3.7, когда ранее name__like соответствовали терминам, начинающимся со строки.

Если вы хотите также искать как названия терминов, так и слаги, вы можете использовать search вместо name__like.

Дополнительную информацию можно получить здесь https://developer.wordpress.org/reference/classes/wp_term_query/__construct/


После того, как вы получите бренды, вы также можете получить все продукты, которые относятся к этим брендам, выполнив следующие действия WP_Query с tax_query следующим образом, если тот, что вверху, не решит вашу проблему:

$products = new WP_Query([
    'post_type' => 'product',
    'tax_query' => [
      'taxonomy' => 'brand',
      'field' => 'term_id',
      'terms' => $brands,
      'operator' => 'IN'
    ]
]);

Дайте мне знать, если это работает для вас.

person Omar Tanti    schedule 14.10.2018