Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 15.03.2024)
428420
осіб
347
літаків
325
гелікоптерів
6758
танків
12949
ББМ
10580
артилерія
717
ППО
1017
РСЗВ
13993
машин
26
кораблі і катери
Теорія WordPress – Різниця між циклами query_posts, get_posts і WP_Query
Опубліковано

Теорія 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 -- інфографіка
Різниця між циклами 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>

 

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *