2

关于效率的问题。使用wp_query($args)和 和有什么不一样$query = new WP_Query($args)?效率/SQL查询数量有什么区别吗?一种总是比另一种更好,还是在某些情况下首选一种风格?

例如,如果我想要一个基于类别包含 3 列的复杂页面,那么以下两个示例有何不同?

$query = new WP_Query("category_name=Issue 1")
while ($query->have_posts())....

对比

rewind_posts()
query_posts("category_name=Issue 1")
while(have_posts())...
4

4 回答 4

3

没有。

一个只是调用另一个,这是来自WP source

function query_posts($query) {
        $GLOBALS['wp_query'] = new WP_Query();
        return $GLOBALS['wp_query']->query($query);
}

天哪,我喜欢 WP,它太光滑了。失败。

于 2013-08-01T16:54:46.593 回答
2

这里有一系列不错的答案:https ://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts

根据经验,您最好选择第一个选项。使用 query_posts,您实际上创建了一个 WP_Query 并将其分配给全局 wp_query。如果您忘记重置帖子,这可能会造成严重问题。希望大家帮忙解释一下!

于 2013-08-01T17:05:17.713 回答
1

使用WP_Query.

来自WordPressquery_posts函数参考

应该注意的是,使用它来替换页面上的主查询 会增加页面加载时间,在最坏的情况下,所需的工作量会增加一倍或更多。虽然易于使用,但该功能也容易在以后出现混乱和问题。有关详细信息,请参阅下面关于警告的进一步说明。

对于一般的帖子查询,使用WP_Queryget_posts

强烈建议您改用pre_get_posts过滤器,并通过检查更改主查询is_main_query

使用WP_Query,您可以在一个页面上运行多个查询。query_posts只是用自定义查询替换主循环。正如文档所述,修改主循环有比使用更好的方法query_posts

于 2013-08-01T17:12:57.453 回答
0

WP_Query 是query_posts()&get_posts()函数的超集。这两个函数都将调用 WP_Query。但是我发现了与互联网的以下差异。

  • 如果您需要修改页面的主查询(为此有更好和更可靠的方法可以完成,而不是此函数的简单方法),query_posts()可能会在一种且唯一的情况下使用。它设置了许多全局变量,如果在任何其他地方和任何其他目的使用,将导致晦涩和可怕的错误。为此,任何现代 WP 代码都应该使用更可靠的方法,例如使用 pre_get_posts 钩子。永远不要使用 query_posts();

  • get_posts()在机制上非常相似并且接受相同的参数,但返回帖子数组,不修改全局变量并且可以在任何地方安全使用

  • WP_Query类在幕后具有强大的功能,但您也可以创建和使用它自己的对象。更复杂一点,限制更少,在任何地方都可以安全使用。

于 2019-03-26T06:09:31.190 回答