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

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

Демокріт

Ми потребуємо не стільки допомоги друзів, а більше тієї впевненості, що ми її отримаємо Демокріт… Читати далі

21/02/2022

Майк Тайсон

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

12/02/2022

25 корисних порад та рішень jQuery, які ви повинні знати

jQuery – це швидка і досить невелика бібліотека JavaScript. Вона спрощує створення інтерактивних та приголомшливих… Читати далі

09/02/2022

Йоганн Вольфганг фон Гете

Кожен чує тільки те, що він розуміє Йоганн Вольфганг фон Гете   Читати далі

03/02/2022

Сайт для перукарні Teti Bond

  Опис проекту: Розробка офіційного сайту для перукарні Teti Bond в місті Житомир. Перукарня орієнтована… Читати далі

29/01/2022

Як повністю і без сліду видалити плагін у WordPress

Плагіни є невід'ємною частиною функціонування WordPress, адже за їх допомогою можна досягти практично необмеженої розширюваності… Читати далі

23/01/2022