/ Сайтостроение / Wordpress / Циклы wordpress (основа основ)

Циклы wordpress (основа основ)

HIT

01.10.2015

1586

Основой структуры wordpress является запрос к базе данных и вывод данных в цикл. Какие бывают циклы, когда лучше применять тот или иной цикл, рассмотрим в данной статье.

Стандартный цикл wordpress (index.php, category.php, tag.php, архивы)

Обратите внимание: в стандартном Цикле мы не указываем никаких данных для выборки записей, а сразу начинаем цикл с if( have_posts() ){… Это говорит о том, что данные уже существуют и их нужно просто обработать и вывести на экран.

<?php if (have_posts()) : ?>

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

<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

<?php endwhile; ?>

<?php endif; ?>

Цикл на основе query_posts()

Преимущества такого изменения в том, что если мы, например, изменим количество выводимых записей на странице с 10 (по умолчанию) на 20, то пагинация на странице автоматически подстроиться под это изменение, потому что query_post() меняет данные глобальной переменной $wp_query, а пагинация строиться именно на основе этих данных.

<?php global $query_string; // параметры базового запроса
query_posts($query_string.'&cat=-6,-9&order=ASC&posts_per_page=20'); // базовый запрос + свои параметры
?>

[СТАНДАРТНЫЙ ЦИКЛ WORDPRESS]

<?php wp_reset_query();// сброс запроса?>

Не нужно использовать query_posts() для создания нескольких циклов на одной странице, для вывода в сайдбар списка постов, для создания дополнительного вывода записей и т.п., для этих целей используйте циклы на основе get_posts(). К тому же, обе функции понимают параметры одинаково! Так зачем «платить» больше?..

Цикл на основе WP_Query()

Особенность циклов на WP_Query() в том, что мы создаем новый объект ( $query ), который никак не связан с аналогичным глобальным объектом $wp_query и поэтому мы никак не нарушаем структуру текущей страницы.

<?php $query = new WP_Query( 'cat=9&nopaging=1' );// указываем категорию 9 и выключаем разбиение на страницы (пагинацию) ?>

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

<h2><a href="<?php the_permalink(); ?>">
<?php the_title(); ?></a></h2>

<?php endwhile; ?>
<?php endif; ?>

<?php wp_reset_postdata(); // сбрасываем переменную $post ?>

Цикл на основе get_posts()

Самый удобный вариант выводить нужные записи в нужном порядке — это выводить их с помощью get_posts(). get_posts() в 99% случаев полностью заменяет WP_Query()

<?php global $post;
$args = array( 'posts_per_page' => 5, 'offset'=> 0, 'category' => 48 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(thumbnail); ?><?php the_title(); ?></a>

<?php endforeach; ?>
<?php wp_reset_postdata() ?>

Где и какой из 3-х вариантов циклов использовать:

  • query_posts() — если нужно изменить/подправить стандартный вывод записей на страницах WordPress. Можно использовать 1 раз на странице;
  • get_posts() — если нужно вывести записи из Базы Данных. Можно использовать сколько угодно раз на странице;
  • Класс WP_Query() — во всех других случаях когда не подошли query_posts() и get_posts().

Инфографика по данной теме
query_functions

И еще раз тезисно:

query_posts — основной (базовый) запрос wordpress, влияет в каком месте (запись, категория, поиск и т.д.) сайта мы находимся. Если необходимо незначительно скорректировать используем query_posts.
Если нужно создать какой-либо масштабный запрос, используем WP_Query — это независимый полноценный запрос.
get_posts является легковесной служебной функцией для создания выборки постов.

Любопытно, но на деле, если всего один цикл, у query_posts меньше обращений к БД чем у get_posts. Расчет был сделан на основе функции замера количества запросов к БД.

Дальнейшая тема для изучения — глобальные переменные.

Поделится информацией с друзьями

  • Комментарии
  • Вложения

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

Пока нет комментариев. Будь первым!

Циклы wordpress (основа основ) Циклы wordpress (основа основ)
Акции Woocommerce
Рекомендации для васАкции WoocommerceOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.