Плагин 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 подставьте название своего типа.
Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.