在不带参数的情况下启动WP_Query(),然后通过Query()方法添加它们

时间:2019-05-16 作者:Andron

我从另一个开发人员那里继承了一个主题的维护,我试图理解他们这样做的原因。

该主题包括一个页面模板,用于运行帖子的自定义查询。设置如下:

    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
    $query = new WP_Query();
    $query->query(\'posts_per_page=\'.get_option(\'posts_per_page\').\'&paged=\' . $paged);
我所做的,以及我经常看到其他人所做的,就是在创建新的类实例时传入查询参数,即。new WP_Query($args);

调用$query->query($args) 方法有什么不同吗?从性能角度来看,它是否相同?(我想确保它不会两次命中数据库。)

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

调用$query->query($args) 方法有什么不同吗?

$query = new WP_Query( $args ); 只是“先实例化类,后查询”版本的快捷方式,如$query = new WP_Query; $posts = $query->query( $args );. 您可以从类构造函数源代码中看到它here:

public function __construct( $query = \'\' ) {
    if ( ! empty( $query ) ) {
        $this->query( $query );
    }
}
从性能角度来看,它是否相同?(我想确保它不会两次命中数据库。)

是的,除非你这样做:

$args = [ \'paged\' => 2 ];
$query = new WP_Query( $args );
$posts = $query->query( $args );
那就意味着双重查询。

但是,返回值存在差异:

$query = new WP_Query( $args );  // returns an object
$posts = $query->query( $args ); // returns an array
get_posts() (source) 例如,使用第二种方法。

我想知道他们这样做是否有充分的理由

我不知道他们为什么那样做,但确实如此perfectly fine (尽管在实例化类时使用直接查询时,代码会更紧凑一些)。我更关心的是如何使用正确的查询参数;e、 g.使用适当的立柱类型和设置no_found_rowstrue 不需要分页时—事实上,将其设置为true 可以提高性能。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post