检查GET_POSTS的返回值

时间:2016-02-19 作者:karlo jay bueno

我一直想改变我的WP_Queryget_posts 方法。但我真的不知道如何检查get_posts 为null或具有值。

如何转换此WP_Query 检查是否合适get_posts 检验员

这是我的WP_Query 检查人:

$custom_query = new WP_Query($args);
if ( $custom_query->have_posts() ) {
    ...
}

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

从前面的问题中,我知道您希望优化查询。没有必要改变WP_Query 进入get_posts 用于性能。正如我在另一篇帖子中所说的,是的,get_posts() 快于WP_Query 因为get_posts() 合法地破坏分页,但是什么呢get_posts() do可以通过WP_Query.

真正了解什么get_posts() 是的,让我们看看source code. 本质上,get_posts() 执行以下操作:(让我们忘记中无用的参数get_posts()

$args = [
    \'no_found_rows\'       => true,
    \'ignore_sticky_posts\' => 1
    // Any other user passed arguments
];
$r = new WP_Query( $args );
return $r->posts;
这一切意味着什么get_posts() 只返回$posts 属性。$posts 持有一系列帖子

  • \'no_found_rows\' => true 是合法破坏分页的内容,也是您不应使用get_posts 用于分页查询。这也是为什么get_posts() 比正常速度快WP_Query 默认情况下为no_found_rows 设置为false。

    因为get_posts() 仅返回帖子数组,而不是查询对象,必须使用普通foreach 一圈接一圈地穿过柱子。另一件需要注意的事情是,由于查询对象没有返回,模板标记如下the_content() 不可用,因为$post 全局未设置为当前职位。在正常循环中,the_post() 设置postdata,使模板标记可用。对于get_posts(), 我们需要使用setup_postdata( $post ) 在我们的foreach循环中

    正确循环get_posts(), 我们需要这样做

    $posts_array = get_posts( $args );
    if ( $posts_array ) { // Make sure we have posts before we attempt to loop through them
        foreach ( $posts_array as $post ) {
            setup_postdata( $post );
    
            // Now we can use template tags
            the_title();
            the_content();
        }
        wp_reset_postdata(); // VERY VERY IMPORTANT
    }
    
    我不会为了改变现有的WP_Query 实例以优化它们。只需添加\'no_found_rows\' => true 到您的WP_Query 争论,维奥拉,你在做什么get_posts() 正在做

  • SO网友:Sumit

    使用简单的empty 作用

    $wpse_posts = get_posts( $args );
    
    if ( ! empty( $wpse_posts ) ) {
        //Do the loop
    
    } else {
       //No post found
    }
    

    相关推荐

    将wp_Query替换为wp_User_Query

    我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the