Плагин WordPress, который добавляет свои данные в базу данных, должен очищать их после того, как пользователь его удалил. Для этого в движке есть простой и удобный инструмент – файл uninstall.php. Разберем, что он может, и как его использовать ВордПресс-разработчику.
Как работает uninstall.php в WordPress
Он помещается в корневой каталог плагина. Например, дополнение находится в папке
plugins/add-comments/
С файлом удаления она будет иметь структуру:
plugins/add-comments/ /add-comments.php /index.php /uninstall.php /readme.txt
Когда пользователь в админке нажимает Удалить, движок ищет файл uninstall.php и выполняет его. Это позволяет разработчикам плагинов убирать “мусор” из базы данных.
Что может uninstall.php
Он может содержать любой код, необходимый для очистки и удаления всех данных плагина. Но первым делом должен иметь защиту от нежелательного доступа.
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) exit;
Эта строка должна находится в самом его начале. В тоге, если что-то кроме WordPress попытается получить доступ к файлу, скрипт немедленно будет завершен.
Пример uninstall.php, который удаляет несколько типов данных:
<?php if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) exit; // удалить опции плагина // удалить промежуточные данные // удаляем cron-события // удалить что-либо еще
Правильно будет очистить все данные их БД, а также файловую структуру модуля.
Удаление опций плагина
Часто в плагинах создаются свои опции. Чтобы их удалить, используется функция delete_option()
. Например, чтобы удалить опцию с названием add_comments_options
можно этим кодом:
delete_option( 'add_comments_options' );
Чтобы удалить несколько опций, можно использовать массив:
$options = array ( 'add_comments_options_1', 'add_comments_options_2', 'add_comments_options_3', ); foreach ( $options as $option ) { if ( get_option( $option ) ) delete_option( $option ); }
Вместо add_comments_options_1
и остальных укажите свои названия.
Удаление промежуточных данных (transients)
Они тоже хранятся в базе данных ВордПресс. Для этого есть функция delete_transient()
:
delete_transient( 'add_comments_transient' );
Для массовой очистки:
$transients = array ( 'add_comments_transient_1', 'add_comments_transient_2', 'add_comments_transient_3', ); foreach ( $transients as $transient ) { delete_transient( $transient ); }
Удаление cron-событий
Используется функция wp_unschedule_event()
. Например:
$timestamp = wp_next_scheduled( 'add_comments_cron_event' ); wp_unschedule_event( $timestamp, 'add_comments_cron_event' );
Удаление таблиц БД
Чтобы удалить таблицу с названием add_comments_table
:
global $wpdb; $table_name = $wpdb->prefix .'add_comments_table'; $wpdb->query( "DROP TABLE IF EXISTS {$table_name}" );
wpdb – это WordPress-класс для операций с таблицами базы данных.
Удаление записей и страниц
Для этого служит функция wp_trash_post()
. Например, чтобы удалить пост с ID=123:
wp_trash_post( 123 );
Удалять посты и страницы нужно в том случае, если вы абсолютно уверены, что пользователю они больше не нужны. Один из способов это выяснить – добавить опцию на странице настроек плагина с вопросом «Удалить посты/записи при удалении плагина?»
Удаление пользовательских типов записей
Часто в плагине нужно создать свой тип записей. При удалении дополнения эти записи тоже нужно удалять. Для этого используют wp_delete_post()
. Например, чтобы удалить все записи, которые относятся к пользовательскому типу add_comments_cpt
:
$add_comments_cpt_args = array( 'post_type' => 'add_comments_cpt', 'posts_per_page' => -1 ); $add_comments_cpt_posts = get_posts( $add_comments_cpt_args ); foreach ( $add_comments_cpt_posts as $post ) { wp_delete_post( $post->ID, false ); }
Функция get_posts()
выбирает все записи, которые относятся к нашему типу. Затем идет их перебор и удаление функцией wp_delete_post()
. В коде вместо add_comments_cpt
подсавьте свое значение.
Также будут удалены комментарии, мета-поля, таксономии этих записей.
Параметр false
указывает движку, чтобы он помещал посты в корзину. Если хотите удалить их безвозвратно, поставьте true
.
Удаление метаданных пользователя
Для этого имеется delete_user_meta()
. Например, нужно удалить все метаданные пользователя с именем add_comments_user_meta
:
$users = get_users(); foreach ( $users as $user ) { delete_user_meta( $user->ID, 'add_comments_user_meta' ); }
get_users()
– получает массив всех зарегистрированных пользователей. Дальше он перебирается и функцией delete_user_meta()
удаляются все пользовательские метаданные с именем add_comments_user_meta
.
Удаление метаданных записи
Метаданные постов удаляет функиця delete_post_meta()
. Удалим, например, все мета с названием add_comments_post_meta
:
$add_comments_post_args = array( 'posts_per_page' => -1 ); $add_comments_posts = get_posts( $add_comments_post_args ); foreach ( $add_comments_posts as $post ) { delete_post_meta( $post->ID, 'add_comments_post_meta' ); }
В параметре posts_per_page использовано значение
-1
, чтобы получить все записи.
Удаление метаданных записи для произвольного типа записей
Если хотите удалить метаданные только определенного типа записи , замените значение $add_comments_post_args
в приведенном выше коде на следующее:
array( 'post_type' => 'add_comments_cpt', 'posts_per_page' => -1 );
Вместо add_comments_cpt
подставьте название своего типа.
Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.