использование WP_Query с пользовательским SQL в WordPress - PullRequest
2 голосов
/ 12 июня 2010

Я пишу плагин для WordPress и хочу создать свой собственный поиск.Я пытался изменить поиск по WordPress, но то, что я делаю, очень специфично для SQL-запроса.Я сравниваю координаты широты и долготы и получаю посты на основе этого.

Я могу отображать сообщения, используя стандартный запрос wpdb, но тогда я не получаю другие функции, такие как пейджинг.Я хотел бы иметь возможность использовать мой оператор SQL с функцией WP_Query.Если я не ошибаюсь, тогда я смогу использовать функции подкачки и другие функции, предоставляемые глобальной переменной $ posts.

Это правильно ??Я часами гуглял, но не могу найти ничего для плагинов, кроме использования аргументов для выбора категорий и т. Д. Мне просто нужно отправить полную команду SQL - больше ничего.

Большое спасибо ....

Ответы [ 3 ]

4 голосов
/ 12 июня 2010

Возможно, вы не получите самый оптимальный из SQL-запросов, но если вы получите массив всех идентификаторов записей, которые вы хотите использовать (сначала используя собственный SQL), то используйте WP_Query вместе с аргументами post__in и posts_per_page, WordPress будет обрабатывать все для вас (включая ограничения SQL, нумерацию страниц и т. Д.).

2 голосов
/ 16 августа 2012

В интересах любого, кто обнаружит это, начиная с WordPress 3.1, теперь вы можете использовать фильтр для прямого изменения SQL, используемого $ wp_query. См. Кодекс для получения дополнительной информации.

1 голос
/ 12 июня 2010

Существует фильтр с именем posts_where_paged, который выдаст вам часть WHERE генерируемого SQL-запроса.Измените это с помощью ваших дополнительных необходимых сравнений SQL.Таким образом, вы не меняете способ загрузки страницы WordPress, вы просто изменяете данные, которые он извлекает из базы данных.

Если данные, которые вы извлекаете, не находятся в обычном наборе таблиц, которыезапрашивается во время поиска, тогда вам также придется изменить таблицы, просматриваемые фильтром posts_join_paged.(по крайней мере, я так думаю;))

Посмотрите на строку 2376 в wp-includes / query.php, чтобы увидеть фильтры, которые вы можете использовать для изменения запроса к базе данных.

...