如果在循环中找不到帖子,请隐藏选项卡

时间:2018-06-15 11:22:21

标签: php wordpress

所以我有一个自定义的wordpress搜索页面,将结果分组到自定义帖子类型标题中。

这样可行但如果其中没有帖子,它仍会显示帖子类型。

我该怎么做才能查看该部分是否有帖子,如果没有,则隐藏该部分。

注意:if(!empty($ hasposts))当前为每个支票返回FULL,因为帖子类型有帖子,但它们不属于搜索结果。

<?php       
if( have_posts() ){
    //Define post types:
    $types = array('post', 'promo_offers', 'product_manuals', 'support_posts','product');
    foreach( $types as $type ){

        // RETURN EMPTY IF THE RESLUTS FOR THE POST TYPE IS EMPTY
        $hasposts = have_posts($type);
        if( !empty ( $hasposts ) ) { echo '<div>FULL!</div>';} else {echo '<div>EMPTY!</div>';}

        //BELOW CODE WORKS AS INTENDED
        echo 'your container opens here for ' . $type;
        echo '<ul>';
        while( have_posts() ){
            the_post();        
            if( $type == get_post_type() ){
                echo '<li>';
                the_title();
                echo '</li>';
            }
        }
        echo '</ul>';
        rewind_posts();
        echo 'your container closes here for ' . $type;
    }
}
?>

1 个答案:

答案 0 :(得分:0)

所以我的理解是,have_posts()没有参数,实际上我很好奇你打电话时会发生什么

$hasposts = have_posts($type);

您的函数多次遍历所有帖子,但只显示那些类型为$ type的帖子。关键是has_posts()每次都返回true,因为它引用了所有帖子,而不仅仅是指定类型。

所以我认为你需要的是对每种类型进行单独的查询,如下所示:

foreach( $types as $type ) {
    query_posts("post_type=$type");

    while (have_posts() ) {
         //now this should only happen if the specific type has posts in it...
    }
}