Я ищу решение для моей проблемы пользовательских запросов 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...)
Делать это с WP_Query напрямую невозможно. Запрос строится из чудовищных аргументов (более 1000 строк) WP_Query::get_posts
метод (см. wp-includes / query.php), как в основном длинный ряд конкатенаций AND
заявления к $where
переменная.1
Теперь вы можете подключиться к нескольким фильтрам, чтобы настроить конструкцию этой переменной (которая содержит SQL для запроса). В вашем случае может подойти одно из следующих:
Используя фильтр, вы бы не отправляли аргументы в WP_Query и не создавали бы его «обычным способом», а переопределяли бы, как строится запрос SQL WHERE. Возможно, вам лучше всего выполнить собственный запрос SQL полностью. В кодексе есть статья Отображение сообщений с помощью пользовательского запроса выбора что подробно, как это можно сделать.
1. WP_Query — это не полный ORM, а специальный класс для получения переменных строки запроса и фильтрации сообщений на основе этих правил.
Других решений пока нет …