Запити до бази даних для швидкого оновлення даних, частина 1
Це не перший раз, коли я згадую про це, але одна з проблем, пов’язаних із написанням прямих запитів до бази даних для оновлення інформації в базі даних WordPress, полягає в тому, що ви залишаєте себе відкритими для чогось на зразок:
Так, але є API, щоб робити щось подібне.
І в багатьох випадках це правильно. Я також великий прихильник їх використання. Але бувають випадки, коли прямі, параметризовані запити до бази даних можуть бути більш оптимальним вибором.
Ні, це не база даних, але чи не було б чудово, якби вони виглядали так? Фото Тобіаса Фішера на Unsplash
Це, звичайно, залежить від середовища, в якому ви працюєте, відповідно до вимог вашого проекту.
Отже, це ще одна публікація, яка буде ілюстрацією того, як використовувати $wpdb для швидкого оновлення інформації на основі метаданих (без використання чогось на зразок WP_Query або WP_Meta_Query для її обробки).
Я збираюся розділити це на дві частини, тому що початкова функція, яку я збираюся вам показати, виконує більше ніж одну дію.
Я не прихильник цього.
По-друге, це також можливість перепроектувати функції, щоб вони вели себе більш об’єктно-орієнтованими (це те, чого я прихильник і що я завжди радий просувати ).
Але наразі дозвольте мені викласти суть проблеми
- Я імпортую трохи інформації зі стороннього API.
- Інформація відображається в таблиці wp_posts, а також у таблиці wp_postmeta.
- Існують певні метадані, які є критеріями для визначення статусу публікації. Або, пряміше кажучи, якщо фрагмент метаданих присутній, статус публікації повинен бути встановлений на чернетку, щоб вона не відображалася в основному запиті.
Щоб вирішити цю проблему, потрібно зробити дві речі:
- Нам потрібні ідентифікатори постів,
- І нам потрібно змінити статус постів.
Перш ніж налаштувати запити та решту коду, припустімо, що мета-ключ, який ми використовуємо, творчо називається acme-status. І з цього, давайте почнемо.
1 Візьміть ідентифікатори публікацій із пов’язаним мета-ключем
Спочатку ми створимо функцію під назвою setInactivePosts. Це більш загальне, ніж це було б, якщо ви працюєте в певному домені, але ви розумієте суть.
Потім ми збираємося налаштувати запит, який буде отримувати всі ідентифікатори публікацій, які мають цей конкретний мета-ключ :
Тут ми маємо масив результатів. Але перш ніж щось робити, нам потрібно переконатися, що у нас є дані, на основі яких можна працювати.
2 Вийти раніше?
Перш ніж продовжувати оновлення інформації, ми повинні перевірити, чи є результати. А якщо їх немає?
Тоді ми можемо втекти.
3 Оновіть статус публікації
Але якщо є результати, ми повинні переглянути їх і оновити статус публікації :
То як це все разом виглядає?
4 Всі разом
Коли ми об’єднаємо цю функцію, більшу, ніж потрібно, ви побачите ось що :
Але в наступній публікації ми трохи реорганізуємо це, щоб зробити його більш об’єктно-орієнтованим.
Примітка для адміністраторів баз даних
Для тих із вас, хто добре розбирається в SQL-fu, ви знаєте, що це, швидше за все, можна вирішити за допомогою одного запиту; однак мета цього допису та наступного допису подвійна:
- Щоб показати, як використовувати $wpdb для швидкого досягнення чогось,
- Показати, як розбити процедурний метод виконання чогось на об’єктно-орієнтований метод виконання чогось.
З огляду на це, дякую за всі запитання. 👍🏻