✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Посібник: змініть глобальний запит WordPress

4

У деяких випадках вам може знадобитися змінити глобальний запит на публікацію, який WordPress виконує на будь-якій сторінці, яку ви відвідуєте – як адміністратора, так і інтерфейсу. У цьому посібнику ми розглянемо, який хук використовувати та як змінити аргументи запиту на свій смак.

Який гачок використовувати

Спочатку вам потрібно знати, до якого хука додати свій код. Нам потрібен хук, який трапиться відразу після того, як WordPress налаштує всі аргументи, але до виконання фактичного запиту. Для цього ми використовуємо дію pre_get_posts.

У цьому хуку ви отримуєте один параметр; це WP_Queryоб’єкт, з яким WordPress пізніше виконає запит. Ви вносите зміни в об’єкт, але вам не потрібно повертати його, оскільки WordPress виконає запит із зміненим об’єктом.

add_action('pre_get_posts', function($query) { // Add your code here });

Зміна запиту, швидше за все, потребує використання деяких умовних тегів, щоб визначити ті випадки, які ви хочете змінити. Наприклад, ви можете націлити запит лише на результати пошуку або перегляди категорій.

Умовні теги

У WordPress є купа умовних тегів, за допомогою яких можна вказати, у яких випадках потрібно додати свій код. Умовний тег — це просто функція, яка повертає значення true або false залежно від того, в якому стані знаходиться WordPress. Приклади звичайних умовних тегів призначені is_admin()для перевірки того, чи ми зараз перебуваємо в адмінці чи інтерфейсі, is_singular()чи знаходимося ми на одній публікації чи сторінці у інтерфейсі та is_search()якщо ми на сторінці результатів пошуку.

Майте на увазі, що хук pre_get_postsзапускається як для адміністратора, так і для інтерфейсу. Якщо ви хочете вплинути лише на глобальний запит у інтерфейсі, вам потрібно загорнути свій код у перевірку if умовного тегу is_admin().

Примітка про умовні теги вpre_get_posts

Умовні теги — це чудово, але є деякі речі, про які слід пам’ятати, використовуючи їх усередині pre_get_posts.

По-перше, вам потрібно ознайомитися з тегом is_main_query(). Дія pre_get_postsфактично виконується кілька разів для кожного завантаження сторінки. Наприклад pre_get_posts, запускається під час генерації кожного меню (включно з тими у віджетах). Щоб змінити фактичний глобальний запит, наприклад, публікації для архіву категорій або результати пошуку, вам потрібно націлити «основний запит» за допомогою is_main_query().

Secondly, you need to be aware of cases where you need to check the conditional tags onto the provided object instead of calling the function “independently". Usually when you use conditional tags, you would write it like this:

if (is_main_query()) { // Do stuff }

However when using pre_get_posts, there are some conditional tags you need to apply onto the object. For example:

You should always check is_main_query() onto the object provided in pre_get_posts. Read the documentation for pre_get_posts for more information.

This is an example of checking if we are not in admin, and if we are at the main post query:

Changing or adding arguments

Since we are working with a WP_Query object, you can refer to WP_Query’s documentation for how to build your arguments to customize the posts query. Keep in mind that arguments are already populated. In that case you need to append or change existing values. Or remove the ones you want to remove.

You use the set() function onto the WP_Query object to set arguments. The method accepts two arguments, the argument key and secondly the value. For example, setting the posts_per_page argument would be done like this:

In cases where you want to append or change a pre-existing argument, you would usually do this by first saving the existing argument in a variable. You can use the method get() for this. Then you modify the variable, by appending or merging arrays or whatnot. And finally you use set() to replace the modified variable back onto the query object. I recommend using var_dump() on the object to see what it contains, and this is also a nice way to check if your conditional tags are correct.

Here is a quick example of using get() (simply checking if it is empty), and if so, add your own arguments with set().

Note about tax_query

WordPress має окремі підкласи для роботи з частиною таксономії (WP_Tax_Query) у WP_Query. Якщо вам потрібно внести складніші модифікації таксономічного запиту, це pre_get_postsможе бути зарано. Деякі значення можуть бути порожніми, оскільки вони заповнюються пізніше. У цьому випадку вам краще використовувати дію parse_tax_queryзамість pre_get_posts. Прочитайте документацію для цього хука, щоб дізнатися, чи підходить він вам.

Висновок

Аргументи, які ви додаєте або змінюєте, повністю залежать від того, що ви хочете зробити, але тепер ви повинні мати певне уявлення про стратегії, щоб отримати доступ до глобального запиту. Якщо вам потрібно трохи зрозуміти WP_Queryоб’єкт і як використовувати його аргументи, моє повідомлення про те, як запитувати повідомлення, може бути цікавим.

Джерело запису: awhitepixel.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі