Выполняет ли цикл WordPress итерацию по каждому сообщению, а затем останавливается, когда найдено текущее сообщение?

#php #wordpress

#php #wordpress

Вопрос:

Вот цикл WordPress ниже:

 <?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        // Display post content
    endwhile; 
endif; 
?>
  

Этот код проверяет, есть ли какие-либо записи в базе данных, а затем (каким-то образом) останавливается, когда текущая запись найдена в базе данных? Это то, что делает код?

Ответ №1:

Этот код можно использовать в single-post.php и archive-post.php .

На одной странице $wp_query содержится только одно сообщение, поэтому цикл выполняется один раз.
На странице архива $wp_query может содержаться много сообщений, поэтому цикл выполняется для каждого.


PS: выбор в таблице выполняется перед отображением шаблона.

Ответ №2:

loop Работает с предопределенным выбором сообщений. Выполняется глобальный запрос, чтобы определить, какие сообщения должны отображаться на данной странице. В одном сообщении в блоге есть одно сообщение, в категории / архиве их будет много.

Циклу все равно, сколько выбрано. Он просто выполняет возврат запроса и каждый раз выводит результат. Он не сканирует всю таблицу post каждый раз, поскольку этот выбор выполняется с помощью команды SQL, выполняемой WP, до того, как этот шаблон страницы даже вызывается.