have_posts() – проверяет наличие постов для вывода на странице

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Обратите внимание, что эта функция только для основного цикла. Если мы работаем с дополнительным циклом при помощи WP_Query, то используем метод класса WP_Query::have_posts().

Ещё раз о том, что делает функция, подробнее:

Пример 1. Стандартно

В шаблонах тем WordPress можно часто встретить подобную запись:

if( have_posts() ) :
 
	while( have_posts() ) : the_post();
 
		// тут обычно что-то происходит        
 
	endwhile;
 
else :
	echo 'Ничего не найдено на этой странице';
endif;

Пример 2. Множество циклов

Такую запись можно встретить не часто, однако она важна для понимания сути.

while( have_posts() ) : the_post();
 
	// тут обычно что-то происходит        
 
endwhile;
 
while( have_posts() ) : the_post();
 
	// невероятные вещи продолжают происходить     
 
endwhile;

Как такая запись вообще возможна?

Об этом я и говорил в самом начале, когда упомянул сброс цикла. Когда функция the_post() доводит цикл до конца, у нас происходит сразу две вещи:

Пример 3. Хитрое условие для последнего поста цикла

Или ещё можно сказать – для последней итерации цикла while ( have_posts() ). Обычно, когда идёт разговор об итерациях цикла, первое, что приходит в голову (мою), это уроки информатики с переменными-счетчиками.

Но только не сегодня.

while( have_posts() ) : the_post();
 
	// ... выводится пост например
 
	if( ! have_posts() ) { 
		echo 'это последний пост цикла';
	}
endwhile;

Стоп! Не копируйте, прошу!

Что думаете про этот код? Норм или что-то смущает?

Представьте:

Как исправить? Вместо условия have_posts() на 5-й строке используем другое условие:

	global $wp_query;
	if( $wp_query->current_post + 1 == $wp_query->post_count ) {
		echo 'это последний пост цикла';
	}

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии