在WordPress中使用WP_Query和自定义SQL

时间:2010-06-12 11:39:25

标签: php wordpress-plugin wordpress

我正在为wordpress编写插件,我想创建自己的搜索。我试图改变wordpress搜索,但我正在做的是非常具体的SQL查询。我正在比较纬度和长坐标并根据它得到帖子。

我可以使用标准的wpdb查询来显示帖子,但是我没有得到分页等其他功能。我希望能够将我的SQL语句与WP_Query函数一起使用。如果我思考正确,那么我应该能够使用来自$ posts全局变量的分页和其他功能。

这是对的吗?我用谷歌搜索了几个小时,但是除了使用args选择类别之外,找不到任何插件。我只需要发送一个完整的SQL命令 - 没有别的。

非常感谢....

3 个答案:

答案 0 :(得分:4)

您最终可能无法获得最佳的SQL查询,但是如果您获得了要使用的所有帖子ID的数组(首先使用您自己的SQL),那么使用WP_Query以及参数post__inposts_per_page,WordPress将为您处理所有事情(包括SQL限制,分页等)。

答案 1 :(得分:2)

为了任何人发现这一点,从WordPress 3.1开始,您现在可以使用过滤器直接更改$ wp_query使用的SQL。 See codex for more info.

答案 2 :(得分:1)

有一个名为posts_where_paged的过滤器,它将为您提供正在生成的SQL查询的WHERE部分。使用您需要的额外SQL比较修改它。这样您就不会改变WordPress加载页面的方式,只需更改它从数据库中检索的数据。

如果您提取的数据不在搜索期间查询的正常表格集中,那么您还必须使用posts_join_paged过滤器更改正在查看的表格。 (至少我认为那是那个;))

查看wp-includes / query.php的第2376行,查看可用于修改数据库查询的过滤器。