4 способа вставить цикл

Одним из самых главных элементов при работе с wordpress является понятие цикла или loop. В шаблоне главной странице он начинается так if(have_posts()) и содержит все необходимые тэги и элементы, которые позволят сформировать страницу. Механизм работает прекрасно для простых шаблонов, а вот если у вас необычный дизайн, тогда придётся немного попотеть. К счастью, движок wordpress предлагает вам 4 разных способа как загнать вывод постов в цикл.

Каждая из этих функция полезна при различных ситуациях. Конечно есть много что их объединяет, но самое главное, в чём заключается принципиальная разница между ними и когда стоит использовать ту или иную функцию.

Простой цикл выглядит таким образом:

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

	<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
		<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
		<?php the_content(); ?>
	</div>

<?php endwhile; ?>

	<div class="navigation">
		<div class="next-posts"><?php next_posts_link(); ?></div>
		<div class="prev-posts"><?php previous_posts_link(); ?></div>
	</div>

<?php else : ?>

	<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
		<h1>Ничего не найдено</h1>
	</div>

<?php endif; ?>

Он позволяет при помощи специальных wordpress тэгов (таких как the_title, the_content и другие) выводить информацию из постов в нужном стиле и формате. Он выведет нужное количество постов из выбранной вами категории, настройки этого цикла производятся в админ панели.

Цикл query_posts().

<?php global $query_string; // требуется
$posts = query_posts($query_string.'&cat=-9'); // исключить категорию номер 9

<?php // Здесь идёт стандартный цикл ?>

<?php wp_reset_query(); // очистить запрос ?>

Использовав его вместе с простым циклом вы можете исключить посты из ненужных категорий, или к примеру отсортировать выводимые статьи, вывести посты только из нескольких категорий, а также задать количество выводимых статей — и это ещё не все параметры, которые могут быть использованы. Предыдущий код можно записать коротко, используя укороченную форму объявления функции.

<?php global $query_string; // требуется
$posts = query_posts($query_string.'&posts_per_page=3&cat=-6,-9&order=ASC');

<?php // Здесь идёт стандартный цикл ?>

<?php wp_reset_query(); // очистить запрос ?>

Цикл WP_Query(). Его используют для полного контроля над любым количеством простых циклов.

<?php $custom_query = new WP_Query('cat=-9'); // исключить категорию номер 9
while($custom_query->have_posts()) : $custom_query->the_post(); ?>

	<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
		<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
		<?php the_content(); ?>
	</div>

<?php endwhile; ?>
<?php wp_reset_postdata(); //очистить запрос ?>

Функция принимает почти те же параметры, что и предыдущая и также имеет сокращённую запись

$custom_query = new WP_Query('cat=-7,-8,-9'); // исключить эти категории
$custom_query = new WP_Query('posts_per_page=3'); // вывести только 3 поста
$custom_query = new WP_Query('order=ASC'); // поменять сортировку вывода постов на противоположную

Эту функцию лучше всего использовать когда вы хотите создать и контролировать сразу же несколько простых циклов.Но будьте внимательны, это мощная функция, которую не желательно часто использовать. Так что если к примеру, вы хотите просто создать несколько простых циклов воспользуйтесь следующей функцией.

Цикл get_posts(). Если вы хотите вывести несколько статичных постов в любом месте вашего шаблона — эта функция именно то, что вам необходимо. К примеру вывести 10 последних постов в сайдбаре или 10 любых постов в подвале.

<?php global $post; // rтребуется
$args = array('category' => -9); // исключить категорию номер 9
$custom_posts = get_posts($args);
foreach($custom_posts as $post) : setup_postdata($post);
...
endforeach;
?>

Строка с аргументами также принимает несколько параметров.

$args = array('numberposts'=>3, 'category'=>-6,-9, 'order'=>'ASC');

Подведём итог.



Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *