我有一个自定义循环,其中包含从自定义元字段复选框中添加的帖子。只有选中复选框,才会将帖子添加到循环中。我有一个容纳该循环的容器。我想要做的是检查该循环是否有任何帖子,如果它是空的 - 只需隐藏该容器。因为否则当循环为空时,容器将保留在页面上:
<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();
?>
提前感谢您的帮助。
答案 0 :(得分:0)
您应该通过自定义字段过滤查询(请参阅详细信息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样式,后者在嵌套时会更具可读性。