2012-10-21 96 views
1

我有一个自定义循环,其中自定义元字段复选框添加了帖子。只有当复选框被选中时,该帖子才会被添加到循环中。我有一个容器来保存这个循环。我想要做的是检查该循环是否有任何帖子,如果它是空的 - 只隐藏该容器。因为否则,当循环是空的容器残留在页面上:检查Wordpress循环是否有帖子

<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

您应该通过自定义字段来过滤查询(请参阅详细信息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样式,嵌套时后者可读性强。

+0

是的,这是诀窍。我非常感谢你的帮助。我也学到了一些新东西。谢谢Márton。 – Vasili

相关问题