Що краще використовувати query_posts(), get_posts() або WP_Query
При розробці сайтів на WordPress, майже завжди потрібно показувати колекції сторінок, наприклад, записи з блогу або список новин. Найчастіше це досить складна вибірка, певних типів записів за набором умов. Зробити таку вибірку можна скориставшись функціями query_posts(), get_posts() або класом WP_Query.
Дані методи можна зустріти в документаціях і блогах упереміш. Але питання в тому, коли і де краще використовувати query_posts(), get_posts() та WP_Query. На це запитання спробую відповісти нижче.
query_posts()
Використання query_posts() дуже часто можна зустріти у старих WordPress темах та посібниках. Це дуже примітивний та проблемний спосіб вивести потрібні вам дані. Він знову запускає деякі SQL запити, що призводить до додаткового навантаження на веб-сервер і уповільнить роботу сайту.
Головна проблема query_posts() полягає в тому, що ця функція «ламає» основний об’єкт запиту, що може призвести, наприклад, до неправильної роботи плагінів, які його використовують і точно призведе до неправильної роботи по сторінці розбивки.
Однією пропозицією ви ніколи не повинні використовувати query_posts() у своєму коді.
get_posts()
Ця функція дуже схожа на попередню, вона набуває тих самих аргументів, хіба що деякі значення за замовчуванням злегка відрізняються. Але все ж таки, по своїй роботі кардинально від неї відрізняється. Справа в тому, що вона по-перше повертає масив записів, а по-друге, що найголовніше, вона не заважає головному об’єкту запиту і не модифікує глобальні змінні. А це означає, що її можна безпечно використовувати для створення додаткових запитів, не побоюючись, що щось зламається.
WP_Query
WP_Query це клас, який використовується для головного запиту і його екземпляр можна використовувати у своєму коді.
Попередня функція базується на класі WP_Query, але все ж таки їх використання відрізняється. Використання класу WP_Query більш комплексне, але менш обмежене, ніж get_posts().
Резюмуючи вищесказане, створюючи свою тему для WordPress, query_posts() не варто використовувати ніколи і ніде, get_posts() і WP_Query можна рівноцінно використовувати за потреби в будь-якому місці, що саме справа смаку.