Почему мне нужен цикл wp в single.РНР

в разработке темы WordPress мы можем использовать single.php чтобы показать конкретный отдельный пост.

для этой цели обычной практикой является:

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

зачем мне нужен цикл, чтобы показать один пост? Может ли кто-нибудь привести вескую причину?

2 ответов


на Петля WordPress создает экземпляры некоторых функций, таких как the_title(), the_content() и другие.

другими словами, ваш пост загружается в этом цикле, и цикл прошел один раз, если вы находитесь на одном посту. Хотя это может быть странно иметь цикл, на самом деле это довольно полезно.

WordPress использует иерархия шаблона, который является способом выбора шаблона загрузить для данного сообщения / страницы. В single.php, цикл будет выполняться один раз. Но если у вас нет single.php файл, WordPress будет использовать index.php вместо этого для того же поста.

для согласованности полезно иметь цикл, который работает для любого количества сообщений. Остальное в тебе!--4-->, вам понадобился бы случай для одного поста, а другой случай для нескольких сообщений, и было бы трудно сохранить согласованный метод шаблонов.


Это было то, что убило меня в течение многих лет, и я нашел ответ: Нет, вам не нужно использовать цикл на отдельных страницах, вы просто вызываете the_post () и у вас есть все необходимые данные

.... BUT ....

Если вы не используете цикл (while (have_posts ())....) крючок "loop_end" не вызывается, и если плагин/процесс имеет какое-либо действие на этом крючке, он не будет работать. Поэтому по соображениям безопасности, вы должны использовать цикл.

кроме того, люди спрашивают, нужно ли мне проверять наличие перед циклом: if (have_posts ())?

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

нет, вам не нужно проверить

.... BUT ....

проверка позволяет включать заголовки / заголовки перед циклом и не иметь их, если цикл пуст.