帮助简化如果在wordpress中列表循环

时间:2011-04-22 05:25:54

标签: php wordpress

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
....
<?php endwhile; endif; ?>

可以理解上面的代码。

1,我可以删除if和while条件吗?直接使用<?php the_post();?>

2,我觉得if (have_posts())while (have_posts())相同。它是否冗余?

3 个答案:

答案 0 :(得分:3)

#1 :在没有循环的情况下调用the_post只会让您显示一个帖子。这可能适用于单帖页面,例如,while循环经常被省略:

<?php
// single.php
if ( have_posts() ):
    the_post();
?>
<p><?php the_content(); ?></p>
<? else: ?>
<p>No post found.</p>
<? endif ?>

#2 :您说得对 - 您发布的代码段在ifwhile的组合中是多余的。

然而,在大多数主题中,这是用法:

<?php
if ( have_posts() ):
    while ( have_posts() ): the_post();
?>
<div class="post"><?php the_content(); ?></div>
<?php endwhile; else: ?>
<p>No posts found.</p>
<?php endif; ?>

在这种情况下使用if语句可以让您在没有帖子的情况下显示内容。如果我们只是在该代码中使用while循环,那么没有任何帖子的页面就不会输出任何内容。

答案 1 :(得分:1)

while(have_postS())将自动评估have_postS() <{1}}

但只要它是if(have_postS())(因为它是一个循环)它就会继续,如果你必须循环和一些终止循环的机制,那么使用true

否则

一次while会做得更好。

答案 2 :(得分:1)

我不知道Wordpress,但从它的外观来看,has_posts()返回一个truthy或falsy值。 while循环仅在将truthy值作为条件传递时执行,所以是的,您可以将其减少为whoopin 3行:

<?php while (have_posts()) : the_post(); ?>
....
<?php endwhile;?>

编辑:将此作为另一个示例,说明为什么复制粘贴代码不好......