使用WP_Query与自定义SQL在wordpress

问题描述:

我正在为wordpress写一个插件,我想创建自己的搜索。我试图改变WordPress的搜索,但我正在做的是与SQL查询非常具体。我正在比较纬度和长度的坐标,并基于此获取帖子。使用WP_Query与自定义SQL在wordpress

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

这是对吗?我搜索了几个小时,但找不到使用参数选择类别等插件的任何东西。我只需发送一个完整的SQL命令 - 没有别的。

非常感谢....

你可能不具有最优化的SQL查询的结束,但如果你要使用的所有帖子ID数组(先用自己的SQL) ,然后使用WP_Query以及参数post__inposts_per_page,WordPress将为您处理所有事情(包括SQL限制,分页等)。

+0

感谢您的回复......这听起来确实很有效!我唯一的问题(我认为)是在页面加载后我正在进行数据库调用。我使用简码加载插件功能,然后执行查询。我猜如果我将SQL查询更改为可以工作的头函数? – 2010-06-12 12:40:22

+0

您是在一个页面中使用短代码,还是在循环内使用短代码? – TheDeadMedic 2010-06-12 13:04:19

+0

短代码将在循环内。我创建了一个新页面,并在内容的主体中放置了[示例]。这个例子然后调用我的函数,它将查询自定义的SQL – 2010-06-12 13:13:54

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

如果您正在提取的数据不在搜索过程中查询的普通表集中,那么您还必须更改posts_join_paged过滤器所查看的表。 (至少我认为这是一个;))

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

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