使用$wpdb而不是WP_QUERY查询记录是否更快?

时间:2015-08-05 作者:Trang

我指的是从数据库查询记录的速度,而不是我们呈现所获得内容的方式。更具体地说,我只想查询帖子的ID,我的网站包含4000多篇帖子(它们是自定义帖子类型),我只想拥有它们的所有ID。

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

是的,自定义SQL查询本质上比WP_Query. 自定义SQL查询的缺点是会丢失很多东西,如对象缓存、过滤器和操作等,如果Wordpress已经提供了自定义SQL,也不鼓励使用自定义SQL。

WP_Query 但是,通过添加和使用fields 查询参数中的参数。您也可以使用get_posts 其中使用WP_Query 但不返回post对象,只返回post数组

因此,基本上可以执行以下操作

$args = [
    \'nopaging\' => true,
    \'fields\' => \'ids\' // Just get post ID\'s
];
$q = get_posts( $args );
var_dump( $q );

SO网友:David Labbe

下面是一个如何缓存自定义SQL的示例。

     function get_sample_data() {
        global $wpdb;

        $query
            = "
            SELECT  ID ,post_title
            FROM $wpdb->posts
            LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
            WHERE $wpdb->posts.post_status = \'publish\' 
            AND $wpdb->posts.post_type = \'sample_type\'
            AND $wpdb->postmeta.meta_key = \'_sample_meta_key\'
            AND $wpdb->postmeta.meta_value = \'singular\'
            ORDER BY $wpdb->posts.post_date ASC
            ";

        $result = wp_cache_get( \'sample_cache_key\' );
        if ( false === $result ) {
            $result = $wpdb->get_results( $query );
            wp_cache_set( \'sample_cache_key\', $result );
        }

        return $result;
    }

结束

相关推荐

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

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