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

Посібник: як надсилати запити на публікації в WordPress

10

Які методи доступні для створення власного запиту на публікацію та коли їх найкраще використовувати? Ця публікація має на меті встановити чітке розуміння двох методів запитів до публікацій, як отримати доступ до результатів, як побудувати аргументи та, нарешті, як очистити їх. Два методи, які ми розглянемо, це get_posts()і WP_Query.

Коли справа доходить до створення нового запиту на публікацію, насправді є два варіанти (на момент написання статті). Вибір насправді залежить лише від ваших уподобань (і деякого незначного впливу на продуктивність). Один із варіантів потенційно може зіпсувати глобальний цикл/запит, у якому ви зараз перебуваєте, якщо ви не обробите його правильно. В одному варіанті ви обробляєте об’єкти, а в іншому – масив. Однак аргументи для налаштування запиту публікації ідентичні.

Глобальний запит?

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

Але якщо ви хочете змінити запит на публікацію WordPress, це інша історія. У мене є ще одна публікація, яка детально розповідає про те, як це зробити.

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

Два методи запиту повідомлень

Ви можете запитувати дописи за допомогою функції get_posts()або створення нового екземпляра WP_Query.Перший параметр повертає масив дописів, а другий ви обробляєте об’єкт. Оскільки get_posts()повертає масив лише дописів, зазвичай простіше використовувати це будь-де, де забажаєте. Однак якщо ви хочете розбити свій запит на сторінки, вам обов’язково слід створити WP_Queryекземпляр.

Ця функція get_postsє функцією-обгорткою, WP_Queryщо означає, що вона приймає ті самі аргументи, але get_postsмає кілька додаткових аргументів-псевдонімів. Сторінка документації WordPress для get_posts не містить списку можливих аргументів (крім аргументів псевдонімів), але посилається на сторінку документації для WP_Query для аргументів. Пізніше ми розглянемо аргументи ближче.

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

Спосіб циклічного перегляду власного запиту публікації відрізняється залежно від того, який метод ви вибрали. Ви повинні бути знайомі із загальним циклом WordPress, який використовується майже в усіх шаблонах тем:

if (have_posts()) { while (have_posts()): the_post(); // Access to each post; you can use template tags here endwhile; }

Зациклення за допомогою WP_Query

Зациклення результатів використання WP_Queryвідбувається точно так само, за винятком того, що ми конкретно посилаємося на об’єкт екземпляра в циклі. Нам також потрібно пам’ятати про «скидання стану» після завершення циклу, щоб глобальний об’єкт post повернувся до того, що було раніше. Для цього ми використовуємо wp_reset_postdata().

Якщо ви створите дамп об’єкта, створеного WP_Query( $custom_queryу наведеному вище прикладі), ви побачите повний запит і використані аргументи. Цікавими частинами тут є властивості «found_posts» і «posts». Властивість ‘ posts‘ містить результат об’єктів post, через які виконуватиметься цикл. Кількість дописів, які відповідають вашому запиту, повертається в «found_posts» і є корисною, якщо ви хочете зробити спеціальну пагінацію. Розділіть це значення з параметром WordPress для кількості публікацій на сторінці, щоб визначити, скільки сторінок потрібно для вашого запиту, або просто зверніться до властивості «max_num_pages».

Примітка. Коли ви використовуєте get_postsWordPress, повертає postsз об’єкта лише властивість «» (яка є масивом) WP_Query.

Цикл за допомогою get_posts

Використовуючи get_posts, ми не використовуємо звичайний «цикл WordPress», замість цього ми використовуємо звичайний цикл масиву PHP. Кожен елемент у масиві є об’єктами post, і після завершення циклу скидання не потрібне. Майте на увазі, що шаблонні теги (наприклад the_title(), the_permalink()тощо) недоступні в цьому циклі. Вам потрібно буде звернутися до властивостей об’єкта публікації (наприклад, $custom_post->ID).

Я рекомендую вам називати об’єкти публікації якось інакше, ніж $post. У вас можуть виникнути проблеми під час спроби отримати доступ до властивостей публікації (це може стосуватися глобального об’єкта публікації, а не публікації в циклі).

Якщо ви хочете використовувати теги шаблону для полегшення доступу до інформації про публікацію (наприклад, the_title()і the_permalink()), ви можете це зробити. Зробіть це, сказавши WordPress налаштувати глобальний об’єкт публікації всередині циклу за допомогою setup_postdata(). Якщо ви це зробите, вам потрібно буде скинути стан за допомогою wp_reset_postdata()після циклу.

$custom_query = get_posts([/ Arguments here /]); foreach ($custom_query as $post) { setup_postdata($post); // Template tags are available here, for example: the_title(); } wp_reset_postdata();

Майте на увазі, що setup_postdataпотрібно, щоб об’єкти, які ви проходите в циклі (asчастина «» у циклі foreach), мали назву $post! У першому прикладі я назвав об’єкти post, $custom_postі це не працюватиме з setup_postdata().

Однак, якщо вам потрібен лише доступ до основної інформації про публікацію, ви можете пропустити налаштування глобального об’єкта публікації та використати відповідні get_теги шаблону «» та ідентифікатор публікації. Наприклад, тег the_permalink()працює правильно, лише якщо налаштовано глобальний об’єкт публікації, але ви можете запитати постійне посилання на публікацію без глобального об’єкта публікації, просто використовуючи echo get_the_permalink($custom_post->ID).

Аргументи запиту

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

Приклад 1: пов’язані публікації з тієї самої категорії

Скажімо, ви хочете показати «пов’язані публікації» в кінці однієї публікації. Він має відображати випадковий вибір із 3 публікацій, які належать до тієї ж категорії, що й поточна публікація, і виключати поточну публікацію з результату.

Аргументи досить зрозумілі. Я прошу лише " post" в " post_type" і максимум 3 повідомлення в " posts_per_page'.

Для запиту публікацій у категоріях ви можете створити tax_query або використати простіший ‘ category__in‘ (Примітка: працює лише для категорії публікацій). У наведеному вище прикладі я використовую wp_get_post_categories()для отримання масиву ідентифікаторів термінів, призначених наданій публікації, і використовую це для аргументу «category__in».

Ви можете виключити ідентифікатори публікацій за допомогою «post__not_in», тоді як я вказав ідентифікатор поточної публікації. Нарешті я попросив довільний порядок публікацій, встановивши " rand" у " orderby". Ви можете надати, наприклад, " title" або " date", щоб упорядкувати їх по-різному. Подивіться на документацію для замовлення, щоб побачити, що можливо.

Приклад 2: усі дописи спеціального типу дописів із кількома аргументами порядку

У цьому прикладі ми припускаємо, що у вас є настроюваний тип публікації " book", а в настроюваному шаблоні сторінки ви хочете відобразити всі опубліковані книги. Ви бажаєте впорядкувати публікації в першу чергу за menu_order (атрибут сторінки, це число, яке ви можете встановити для кожної публікації), а по-друге, за назвою публікації.

Знову ж таки, аргументи досить зрозумілі. Я прошу тип публікації " book" як " post_type". Якщо ви встановите для «posts_per_page» значення -1, буде отримано всі (опубліковані повідомлення, якщо ви не вкажете щось інше в post_statusаргументі «»). Насамкінець я надаю масив для «orderby», щоб наказати WordPress сортувати дописи в першу чергу за порядком меню в порядку зростання, а по-друге, за назвою допису в порядку спадання.

Приклад 3: публікації з власними метаданими

Припустімо, у вас є настроюваний тип публікації " book", і ви хочете запитати всі неопубліковані книги або книги, опубліковані між 1990 і 2019 роками.

Найкраще створювати запит за допомогою post meta meta_query(для дуже простих мета-аргументів можна використовувати meta_keyі meta_valueнапряму). Для meta_queryаргументу «» потрібен масив, де кожен аргумент є масивом. Ви можете керувати зв’язком між кожним аргументом за допомогою «relation», який я встановив як «OR» у прикладі вище.

Я надаю два аргументи метаданих для «meta_query». Перший просто порівнює мета-ключ ‘ book_status‘ з текстом ‘ unpublished‘, і якщо він дорівнює, його буде включено. У другому аргументі я кажу WordPress отримати будь-яке значення в мета-ключі " year_published", яке знаходиться між числами 1990 і 2019.

Висновок

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

Якщо вам цікаво, як змінити глобальний запит, який виконує WordPress, я маю окрему публікацію про це.

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

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