Теорія 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>

 

 

Share

Останні пости

Авраам Лінкольн

Ми не допоможемо людям, роблячи за них те, що вони могли б зробити самі Авраам… Читати далі

15/03/2024

Як зберігати каву, щоб вона не втрачала смаку і аромату

Смак приготованого напою залежить не тільки від сорту кави, способу та ступеня прожарювання, помелу зерен,… Читати далі

11/03/2024

Габрієль Гарсія Маркес

Вік — це не те, скільки тобі років, а те, — як ти їх відчуваєш… Читати далі

10/03/2024

Короткий опис ліцензій з відкритим вихідним кодом

Якщо ви створюєте програмне забезпечення, яким хочете поділитися, або використовуєте програмний продукт, який хочете модифікувати,… Читати далі

09/03/2024

Ніл Ґейман

Люди думають, що будуть щасливі, якщо переїдуть в інше місце, а потім виявляється: куди б… Читати далі

20/02/2024

Уроки JavaScript — як почати працювати з об’єктами

Об’єкти є однією з найважливіших і найпотужніших функцій JavaScript, і в багатьох вбудованих функціях об’єкти… Читати далі

17/02/2024