Теория 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 можно изобразить с помощью этой инфографики:
Пример использования функции 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>
Последние посты
Как купить автомобиль на аукционе?
Если вас интересует вопрос, можно ли купить автомобиль на аукционе, вот вам краткий ответ: да.… Читать далее
На что обратить внимание при выборе фонарика на батарейках
Фонарик на батарейках способен помочь в разных ситуациях, начиная от походов и заканчивая авариями. При… Читать далее
Всесторонний обзор Apple Watch Series 9: в чем его отличия от других поколений
Последняя презентация американской компании продемонстрировала несколько разнообразных новинок. В частности, в середине сентября 2023 года… Читать далее
Как утеплить ребенка на зиму с помощью меховых наушников
Голова и уши – это те части тела, которые больше всего нуждаются в тепле зимой.… Читать далее
Как проходит осмотр у проктолога при различных заболеваниях и как к нему подготовиться?
Проктология специализируется на лечении различных заболеваний ануса и прямой кишки. Такие деликатные проблемы вызывают боли… Читать далее
Нюансы размещения мебели на кухне — на что обратить внимание
Обустраивая домашнее пространство, мы всегда стараемся сделать его как можно более уютным и функциональным. При… Читать далее