Теория WordPress – Разница между циклами query_posts, get_posts и WP_Query

В движке Вордпресс есть несколько полезных и, главное, встроенных в движок, циклов-запросов, которые оперируют с данными из базы данных. Речь идет о функциях, которые делают запросы к базе данных и возвращают некий массив контента. И с помощью цикла позволяют эффективно обрабатывать этот массив. Эти функции также позволяют «кастомизировать» (задавать параметры) запрос к базе данных и делать выборку только нужного контента.

 

 

Основные функции для этого: query_posts(), get_posts() и  WP_Query()

Какой контент можно ими обрабатывать: выборка постов (записей), отдельной записи, архив записей (по автору, по дате), выборка записей по категории, выборка записей по тегам (меткам), — с указанием дополнительных параметров.

 

После того, как функция сделала выборку и вернула массив, контент с помощью цикла можно вывести на экран в удобочитаемом виде. Например, «вытянуть» из массива и «передать» html-тегам название поста, дату публикации, категорию поста и т.п.

 

Разница между этими функциями:

  • Цикл на основе query_posts() – стандартный цикл. Это не только наиболее упрощенный способ изменения основного запроса, но и также наиболее проблематичный способ, поскольку заменяет запрос его новым экземпляром (и переписывает глобальные переменные $wp_query, $post, $posts). Можно использовать 1 раз на странице (шаблоне). Эта функция не рекомендуется ввиду того, что делает дополнительные SQL-запросы к базе данных, может вызывать баги, особенно при построении страниц с пагинацией (разбивке по страницам). Вместо этой функции рекомендуется использовать другие методы, рассмотренные ниже.
  • Цикл на основе get_posts() – дополнительный цикл. Эта функция очень похожа в использовании на предыдущую, может принимать те же параметры (за небольшими исключениями), но ее главное отличие в том, что она возвращает массив публикаций (записей), не изменяя при этом глобальные переменные ($wp_query, $post, $posts). Использование этой функции безопасно практически в любом месте (читай – шаблоне). Можно использовать много раз на странице (в одном шаблоне). Наиболее популярный метод.
  • Цикл на основе WP_Query() – дополнительный цикл. Класс WP_Query наиболее сложный (предыдущие две функции работают на его основе), позволяет задавать множество параметров выборки, а главное его отличие – он позволяет создавать новый собственный объект и работать в дальнейшем с ним. Эта функция особенно полезна, когда нужно выводить посты, которые не связаны с текущей страницей или при работе с множественными циклами. Использование этой функции также безопасно практически в любом месте (читай – шаблоне). Рекомендуется использование только для особых и/или сложных случаев выборки данных.

 

 

Визуально работу функций запросов в WordPress можно изобразить с помощью этой инфографики:

Разница между циклами query_posts, get_posts и WP_Query — инфографика

 

 
 

Пример использования функции get_posts() для выборки из базы данных 5 постов в случайном порядке, и вывода ссылок на эти посты в маркированном списке

<ul>
<?php
global $post;

$args = array( 'posts_per_page' => 5, 'orderby' => 'rand' );
/* постов на страницу - 5, сортировка - в случайном порядке */
$rand_posts = get_posts( $args );
foreach ( $rand_posts as $post ) :
  setup_postdata( $post ); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach;
wp_reset_postdata(); ?>
</ul>

 

 

View Comments

  • записываются данные текущего поста в цикле и в конце цикла в этой переменной остаются данные последнего поста из этого цикла, а нужно чтобы $post всегда содержала данные текущего поста страницы. Т.е. получается до использования цикла

Recent Posts

Сравнение цен с конкурентами: зачем это нужно интернет-магазину

Содержание статьи Введение: почему цены решают все Что значит сравнение цен с конкурентами 5 причин,…

4 дня ago

Лучшие сауны Киева: проверенные адреса и актуальные цены

В последние годы интерес к саунам в Киеве заметно вырос. Это связано не только с…

5 дней ago

BaniSauny: быстрый гид по баням и саунам Киева

В современном ритме мегаполиса отдых стал неотъемлемой частью заботы о здоровье и эмоциональном состоянии. Особенно…

6 дней ago

Рекламный аккаунт Facebook: Как получить максимум от рекламы с Tech4You

В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…

7 дней ago

Тактический тепловизор: назначение, особенности и преимущества

Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…

2 недели ago

Как книги для саморазвития помогают «закрыть лишние мысли» и начать жить здесь и сейчас

Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…

2 недели ago