【问题标题】:using WP_Query with custom SQL in wordpress在 wordpress 中使用带有自定义 SQL 的 WP_Query
【发布时间】:2010-06-12 11:39:24
【问题描述】:

我正在为 wordpress 编写一个插件,我想创建自己的搜索。我试图改变 wordpress 搜索,但我正在做的是非常具体的 SQL 查询。我正在比较经纬度坐标并以此为基础获取帖子。

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

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

非常感谢....

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    您可能不会得到最优化的 SQL 查询,但如果您获得了一个包含所有要使用的帖子 ID 的数组(首先使用您自己的 SQL),然后使用 WP_Query 以及参数 @ 987654323@ 和 posts_per_page,WordPress 将为您处理一切(包括 SQL 限制、分页等)。

    【讨论】:

    • 感谢您的回复...听起来确实可行!我唯一的问题(我认为)是我在页面加载后进行数据库调用。我使用简码加载插件功能,然后执行查询。我想如果我将 SQL 查询更改为可以工作的标头函数?
    • 您是在单个页面中使用短代码,还是在循环中使用帖子?
    • 短代码将在循环内。我创建了一个新页面,并在内容正文中输入了minimal reproducible example。然后该示例调用我的函数,该函数将查询自定义 SQL
    • 在这种情况下,您必须生成自己的分页(参见paginate_links())并将当前页面(很可能来自$_GET 变量)提供给带有paged 变量的WP_Query。
    • 我发现我可以改变使用 WP_query 并使用 query_posts($args).. 我使用的 args 正如你所建议的那样,是我第一个查询中的 Post IDS。现在这意味着该页面可以使用“开箱即用”的分页链接。谢谢 :) 你知道我有什么办法可以维护帖子 ID 的结构吗?因此,如果我有一个 ids(3,6,9) 数组 - 当我在 post__in 中使用它时 - 它可以按该顺序返回帖子吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-12-16
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多