have_posts

Условный тег. Проверяет есть ли у текущего запроса WP результаты для вывода, т.е. есть ли в наличии посты, которые можно вывести для текущей страницы.

В конце Цикла WordPress, функция автоматически возвращает метку, что запрос снова полный и готов для вывода, т.е. автоматически использует функцию: rewind_posts().

Хуков нет.

Возвращает

falsе, если результатов для вывода нет и true, если есть что выводить.

Использование

<?php if( have_posts() ){ ... } ?>

Примеры

#1. Определим есть ли записи для вывода

Следующий пример можно использовать, чтобы определить есть ли посты для вывода и если есть запустить цикл while и вывести их:

<?php
if ( have_posts() ){
	while ( have_posts() ){ the_post();
		// код вывода
	}
} else {
	echo wpautop( 'Постов для вывода не найдено.' );
}
?>

#2. Вызов have_posts() внутри Цикла WordPress

Вызов have_posts() внутри Цикла WordPress, означает бесконечный цикл. Смотрите пример:

while ( have_posts() ){ the_post();
		// Вывод поста
		if ( have_posts() ){ // Если это последний пост, цикл начнется заново
				// Делаем что-нибудь, если это не не последний пост
		}
}

2.1. Если нужно проверить есть ли еще посты в текущем цикле, можно использовать такую функцию:

function more_posts() {
  global $wp_query;
  return $wp_query->current_post + 1 < $wp_query->post_count;
}

Эта функция будет возвращать true, если посты еще есть в запросе и false, если был выведен последний пост. Использовать функцию more_posts() нужно будет вместо have_posts() из примера 2.

Код из


wp-includes/query.php

WP 4.7.2

<?php
function have_posts() {
	global $wp_query;
	return $wp_query->have_posts();
}