Деактивация и удаление плагина через меню настроек
Я создаю свой первый плагин (модифицирую существующий под свои нужды), и хотя он работает нормально, я пытаюсь создать простое меню настроек, позволяющее либо деактивировать плагин, либо деактивировать и удалить таблицы, которые создает плагин.
В панели настроек у меня есть следующая форма, которая позволяет администратору отметить чекбокс и отправить форму, что должно:
- Удалить таблицы, созданные плагином
- Деактивировать плагин
- Перенаправить обратно на страницу плагинов
Вот код моей страницы настроек:
<p class="submitmetataxonomyuninstall">
<form method="post" action=""; onsubmit="if (!this.verify.checked) return false;">
<?php _e("Также удалить все таблицы и данные из базы данных:", 'menu-test' ); ?>
<input type="checkbox" name="verify" /></p>
<p><i>(ВАЖНО: Это действие НЕЛЬЗЯ отменить, будут удалены все таблицы и данные из базы данных.)</i></p>
<p class="submit"><input type="submit" name="submitmetataxonomyuninstall" class="button-primary" value="<?php esc_attr_e('Деактивировать & Удалить') ?>" /><small> (Для работы кнопки необходимо отметить чекбокс выше.)</small></p>
</form>
</p>
Однако у меня не получается заставить это работать.
Вот функция, которую, как я думаю, нужно вызвать (когда она находится в основной функции плагина, она успешно деактивирует и удаляет таблицы):
register_deactivation_hook( __FILE__, 'simple_term_meta_uninstall' );
function simple_term_meta_uninstall() {
global $wpdb;
if (function_exists('is_multisite') && is_multisite()) {
// проверяем, является ли активация сетевой - если да, запускаем функцию активации для каждого блога
if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
$old_blog = $wpdb->blogid;
// Получаем все ID блогов
$blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
foreach ($blogids as $blog_id) {
switch_to_blog($blog_id);
_simple_term_meta_uninstall();
}
switch_to_blog($old_blog);
return;
}
}
_simple_term_meta_uninstall();
}
Я полагаю, что это также вызывает эту функцию из существующего файла плагина:
register_uninstall_hook( __FILE__, 'simple_term_meta_uninstall' );
function _simple_term_meta_uninstall()
{
global $wpdb;
$table_name = $wpdb->prefix . 'termmeta';
$wpdb->query("DROP TABLE IF EXISTS $table_name");
delete_option( "simple_term_meta_db_version" );
}
Как мне вызвать эту функцию, используя показанную форму?

Вам просто нужно получить базовое имя любого плагина, чтобы деактивировать его.
if( $uninstall == true ) {
delete_option( 'CHANGETHIS' ); // Удаляем настройку
deactivate_plugins( plugin_basename( __FILE__ ) ); // Деактивируем плагин
}
Обычно они выглядят так: mypluginfolder/mypluginmasterfile.php
Попробуйте этот способ.
Есть несколько способов заставить это работать.
Если вы хотите добавить кнопку на страницу настроек для вызова этой функции, вы можете просто отправить POST-запрос на страницу настроек и проверить, была ли нажата кнопка удаления.
Например:
$uninstall = isset( $_POST[ 'uninstall' ] ) ? true : false; // Проверяем, была ли нажата кнопка удаления
