@xGreen_Max

Как понять внутри цикла WordPress и снаружи цикла?

Прочитал эту статью:https://wp-kama.ru/function/get_posts На 8 пункте написано:
Код нужно использовать внутри Цикла WordPress, где переменная $post->ID:
Как понять внутри Цикла WordPress?

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

// ********************************************************
// ********* Вот это место внутри цикла WordPress? ********
// ********************************************************

<?php endwhile; else : ?>
    
<?php endif; ?>
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
while ( have_posts() ) — это цикл перебора постов из глобального запроса
the_post() — функция устанавливает переменную $post для работы функций the_title(), the_content() и подобные

Если цикл образуется с помощью экземпляра WP_Query(), то и переменные устанавливаются из этого же запроса ( $query->have_posts(), $query->the_post() )

// Задаем нужные нам критерии выборки данных из БД
$args = array(
	'posts_per_page' => 5,
	'orderby' => 'comment_count'
);

$query = new WP_Query( $args );

// Цикл
if ( $query->have_posts() ) {
	while ( $query->have_posts() ) {
		$query->the_post();

		the_title(); // Заголовок
		the_content(); // Контент
	}
} else {
	// Постов не найдено
}

// Возвращаем оригинальные данные поста. Сбрасываем $post
wp_reset_postdata();


get_posts() — это обертка для класса WP_Query с несколькими предустановленными параметрами. Установка переменной $post делается с помощью функции setup_postdata() и в целом тот же цикл выглядит немного по другому

// Задаем нужные нам критерии выборки данных из БД
$args = array(
	'posts_per_page' => 5,
	'orderby' => 'comment_count'
);


$my_posts = get_posts( $args );

// Цикл
if ( $my_posts ) {
	foreach ( $my_posts as $key => $post ) {
		setup_postdata( $post );

		the_title(); // Заголовок
		the_content(); // Контент
	}
} else {
	// Постов не найдено
}

// Возвращаем оригинальные данные поста. Сбрасываем $post
wp_reset_postdata();


Еще раз хочу акцентировать внимание на том, что установка переменной $post нужна для работы функций the_title(), the_content(), get_template_part() и т.д., вместо их использования вы можете доставать данные напрямую из объекта. Например, такая конструкция тоже будет работать

$args = array(
	'posts_per_page' => 5,
	'orderby' => 'comment_count'
);

$my_posts = get_posts( $args );

foreach ( $my_posts as $key => $post ) {

	echo $post->post_title; // Заголовок
	echo  $post->post_content; // Контент

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
pLavrenov
@pLavrenov
Разработка сайтов
while в документации

Внутри цикла это после while():
Ответ написан
Комментировать
@Aricus
Если быть точнее, цикл внутри while, после the_post(); Этот the_post и образует цикл wp извлечения постов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы