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