WordPress: запрос post_title ИЛИ meta_query

Я ищу решение для моей проблемы пользовательских запросов WordPress.

У меня есть поисковая форма, где пользователь может ввести текст, этот текст может быть словом из post_title или meta_value (Company ID),

Итак, мне нужно найти строку в post_title Или meta_key-Field «идентификационный номер»,
но у меня также есть некоторые другие дополнительные параметры поиска.

Это мои Арги для WP_Query:

Array(
[post_type] => company
[pagination] => 1
[posts_per_page] => 10
[paged] => 1
[meta_query] => Array
(
[relation] => AND
[0] => Array
(
[0] => Array
(
[key] => id-number
[value] => FOOBAR
)

[1] => Array
(
[key] => post_title
[value] => FOOBAR
[compare] => LIKE
)

[relation] => OR
)

[1] => Array
(
[relation] => AND
[0] => Array
(
[0] => Array
(
[key] => country
[value] => USA
)
[relation] => OR
)
)
)
)

Array[meta_query][0][1] (post_title) только заполнитель — я знаю, что это не может работать, но как я могу найти
(id-number OR post_title) А ТАКЖЕ (all other vars...)

2

Решение

Делать это с WP_Query напрямую невозможно. Запрос строится из чудовищных аргументов (более 1000 строк) WP_Query::get_posts метод (см. wp-includes / query.php), как в основном длинный ряд конкатенаций AND заявления к $where переменная.1

Теперь вы можете подключиться к нескольким фильтрам, чтобы настроить конструкцию этой переменной (которая содержит SQL для запроса). В вашем случае может подойти одно из следующих:

  • posts_search: Позволяет изменить интерпретацию поисковых запросов (из встроенной / стандартной формы поиска WordPress). Затем вы вручную создадите свой запрос where из поискового запроса.
  • posts_where: Позволяет изменить весь запрос where — однако для каждого запроса.

Используя фильтр, вы бы не отправляли аргументы в WP_Query и не создавали бы его «обычным способом», а переопределяли бы, как строится запрос SQL WHERE. Возможно, вам лучше всего выполнить собственный запрос SQL полностью. В кодексе есть статья Отображение сообщений с помощью пользовательского запроса выбора что подробно, как это можно сделать.


1. WP_Query — это не полный ORM, а специальный класс для получения переменных строки запроса и фильтрации сообщений на основе этих правил.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]