新WP_query()和query_posts()之间的区别

时间:2013-08-01 16:48:42

标签: php wordpress

关于效率的问题。使用wp_query($args)$query = new WP_Query($args)有什么区别?效率/ SQL查询数量有什么不同吗?一个总是优于另一个,还是有一种风格是首选?

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

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

VS

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

4 个答案:

答案 0 :(得分:2)

没有

一个只是打电话给另一个,这是来自WP source

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

上帝,我喜欢WP,它太棒了。失败。

答案 1 :(得分: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。如果您忘记重置帖子,这可能会造成严重问题。希望所有有助于解释它!

答案 2 :(得分:1)

使用WP_Query

来自WordPress query_posts Function Reference

  

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

     

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

     

强烈建议您使用pre_get_posts过滤器   相反,通过选中is_main_query

来更改主查询

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

答案 3 :(得分:0)

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

  • query_posts()可能仅在一种情况下使用,即您需要修改页面的主查询(相对于简单的方法,有更好,更可靠的方法来完成页面查询)此功能)。它设置了许多全局变量,如果在其他任何地方使用或用于其他目的,将导致难以理解的错误。为此,任何现代WP代码都应使用更可靠的方法,例如使用pre_get_posts挂钩。 永远不要使用query_posts();

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

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