Як відфільтрувати пости в WordPress за допомогою ACF та ID користувача

Як відфільтрувати пости в WordPress за допомогою ACF та ID користувача

6 Березня 2024 в 02:18 50

Розробка сайтів на WordPress часто вимагає індивідуалізованого підходу до відображення контенту для користувачів. Однією з таких задач є створення умов, при яких користувачі можуть бачити лише ті пости, до яких вони мають відношення, особливо коли йдеться про сайти з великою кількістю користувачів, такі як інтернет-магазини на WooCommerce. Для цього часто застосовуються додаткові поля (custom fields), створені за допомогою плагіна Advanced Custom Fields (ACF), які дозволяють додавати специфічну інформацію до постів. У цій статті ми розглянемо, як налаштувати фільтрацію постів за ID користувача використовуючи ACF поля для користувацького типу посту “mypost”.

Попередні умови

Перш ніж приступити до реалізації фільтрації, необхідно створити власний тип посту “mypost” та додаткове поле “usersacf” за допомогою ACF, яке буде використовуватись для зв’язку постів з конкретними користувачами. Припустимо, що ці завдання вже виконано і тепер потрібно налаштувати відображення постів відповідно до ID користувача.

Виклик проблеми

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

Рішення через pre_get_posts

Одним із способів реалізації необхідної логіки є використання хука pre_get_posts, який дозволяє модифікувати запит до бази даних перед тим, як пости будуть отримані. Це дозволяє додати додаткові умови до запиту, включаючи фільтрацію по мета полях.

Цей код перевіряє, чи є поточний запит основним і чи він стосується архіву постів типу “mypost”. Якщо так, то до умов запиту додається фільтр за мета полем “usersacf”, де шукається ID поточного користувача.

Альтернативне рішення через новий WP_Query

Іншим варіантом є створення нового запиту WP_Query безпосередньо в місці, де потрібно вивести пости, з відповідними параметрами для фільтрації.

Цей код створює новий запит, який вибирає пости типу “mypost”, що відповідають ID поточного користувача, вказаному в полі “usersacf”.

Висновок

Фільтрація постів за допомогою ACF та ID користувача в WordPress може бути реалізована кількома способами, залежно від конкретних потреб вашого сайту. Використання хука pre_get_posts дозволяє змінити логіку вибірки постів на глобальному рівні, тоді як створення нового запиту WP_Query надає більше гнучкості для локального контексту. Обидва методи ефективні і можуть бути адаптовані під різні задачі.