При разработке плагинов для решения выполняемых ими задач может потребоваться работа с базой данных WordPress.
Рассмотрим механизм работы с базой данных этой CMS и привязку программной логики плагина к его пользовательскому интерфейсу.
Данные вопросы лучше всего рассматривать на конкретном примере. Возьмём в качестве примера плагин Total Old Revisions Cleaner. Постановка задачи при его создании и его пользовательский интерфейс уже были описаны в статье «Написание своего плагина для WordPress. Часть 2. Страница плагина в админпанели».
Теперь необходимо реализовать функционал по его работе с базой данных. То есть, по удалению не актуальных редакций.
Работа с базой данных в WordPress осуществляется при помощи класса wpdb. Это класс содержит широкий набор свойств и методов для работы с базой данных. Однако для того чтобы выполнить запрос на удаление потребуются только один метод query и свойства, которые представляют необходимые таблицы.
При составлении запроса работающего с таблицами самого WordPress настоятельно рекомендуется вместо имён таблиц использовать соответствующие свойства класса wpdb. Так как это решает проблему с префиксами имён и тем самым обеспечивает работоспособность в случае, когда префикс отличается от стандартного «wp_».
Чтобы удалить неактуальные редакции требуется выполнить следующий запрос.
1 |
DELETE posts,rel_ships,meta FROM $wpdb->posts posts LEFT JOIN $wpdb->term_relationships rel_ships ON (posts.ID = rel_ships.object_id) LEFT JOIN $wpdb->postmeta meta ON (posts.ID = meta.post_id) WHERE posts.post_type = 'revision' |
Для этого обратимся к объекту класса wpdb в его метод query строку с этим запросом.
1 2 3 |
global $wpdb; $sql= "DELETE posts,rel_ships,meta FROM $wpdb->posts posts LEFT JOIN $wpdb->term_relationships rel_ships ON (posts.ID = rel_ships.object_id) LEFT JOIN $wpdb->postmeta meta ON (posts.ID = meta.post_id) WHERE posts.post_type = 'revision'"; $wpdb->query($sql); |
Работа плагина Total Old Revisions Cleaner предполагает что редакции будут удаляться только если установлен флажок «Удалить все старые редакции записей и страниц». Поэтому в функцию, которая будет выполнять удаление нужно включить соответствующую проверку.
Вызов этой функции сделаем сразу же после её описания.
1 2 3 4 5 6 7 8 9 10 |
function ClearRevisions() { if (isset($_POST['clean'])) { global $wpdb; $sql= "DELETE posts,rel_ships,meta FROM $wpdb->posts posts LEFT JOIN $wpdb->term_relationships rel_ships ON (posts.ID = rel_ships.object_id) LEFT JOIN $wpdb->postmeta meta ON (posts.ID = meta.post_id) WHERE posts.post_type = 'revision'"; $wpdb->query($sql); } } ClearRevisions(); |
На этом работа с базой данных завершена и необходимо связать программную логику плагина с его интерфейсом пользователя в админ панели.
Для этого в главном файле (именно в нём реализован интерфейс) объявим константу, которая будет содержать путь к директории где он расположен. После этого можно подключить файл с программной логикой расположенный в папке includes
1 2 |
define('PLUGIN_DIR', plugin_dir_path(__FILE__)); require_once(PLUGIN_DIR.'\includes\engine.php'); |
После этого плагин сможет полностью выполнять свои функции.
Ниже представлен скриншот записи до удаления редакций.
Далее скриншот записи после удаления редакций.
Добавить комментарий