【问题标题】:Check if Wordpress loop has posts检查 Wordpress 循环是否有帖子
【发布时间】:2012-10-21 09:32:19
【问题描述】:

我有一个自定义循环,其中包含从自定义元字段复选框添加的帖子。只有选中复选框,那么帖子只会添加到循环中。我有一个包含该循环的容器。我想要做的是检查该循环是否有任何帖子以及它是否为空 - 只需隐藏该容器。因为否则当循环为空时,容器仍保留在页面上:

<div>
  <ul>
  </ul>
</div>

这是循环:

<?php 
/* Slider ------- */
$slider = new WP_Query('showposts=-1');
if ( $slider->have_posts() ):
?>  
<div>
    <ul>
    <?php while ( $slider->have_posts() ) : $slider->the_post(); ?>
        <?php if ( get_post_meta($post->ID, "mf_homeslider", true) == 'slider_on' ){ // Check if post was added to slider ?>
        <li>
        <?php if (has_post_thumbnail()) {  ?>
            <a href="<?php the_permalink(); ?>">
                <?php the_post_thumbnail('large'); ?> 
            </a>
        <?php } ?>
            <div>
                <?php get_template_part('includes/post_meta'); ?>
                <h2>
                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                </h2>
            </div>
        </li>
        <?php } ?>
    <?php endwhile; ?>
    </ul>
</div>
<?php 
endif;
wp_reset_query();
?>

提前感谢您的帮助。

【问题讨论】:

    标签: wordpress loops empy


    【解决方案1】:

    您应该通过自定义字段过滤您的查询(请参阅详细信息here),它还可以提高性能(SQL 条件与 while-if 循环)。之后,have_posts() 返回循环是否包含任何帖子。

    所以不是

    $slider = new WP_Query('showposts=-1');
    

    使用

    $slider = new WP_Query(array(
        'meta_key' => 'mf_homeslider',
        'meta_value' => 'slider_on',
        'posts_per_page' => -1)
    );
    

    并且不再需要if ( get_post_meta(...

    showposts 已弃用,请改用posts_per_page)。

    注意:你正在混合使用大括号和 if-endif 样式,后者在嵌套时会更易读。

    【讨论】:

    • 是的,成功了。我真的很感谢你的帮助。我也学到了一些新东西。谢谢马顿。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多