<?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())
Это избыточность?
# 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 : Вы правы – фрагмент, который вы опубликовали, является избыточным в своей комбинации if
и while
.
Однако в большинстве тем это использование:
<?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 в этом коде, страницы без каких-либо сообщений не выдавали бы ничего.
while(have_postS())
будет автоматически оценивать have_postS()
как if(have_postS())
но он будет продолжаться до тех пор, пока он true
(поскольку это цикл), если вам нужно зациклиться и какой-то механизм, который завершает цикл, тогда используйте while
еще
на этот раз, if
будет лучше.
Я не знаю WordPress, но по внешнему виду has_posts () возвращает либо правдивое, либо фальшивое значение. Цикл while выполняется только в том случае, если в качестве условия передается истинное значение, поэтому да, вы можете уменьшить его до трех строк:
<?php while (have_posts()) : the_post(); ?> .... <?php endwhile;?>
Edit: Поставьте это еще одним примером того, почему код для копирования вставки плохо …