Деактивация и удаление плагина через меню настроек

8 нояб. 2011 г., 22:18:34
Просмотры: 1.01K
Голосов: 2

Я создаю свой первый плагин (модифицирую существующий под свои нужды), и хотя он работает нормально, я пытаюсь создать простое меню настроек, позволяющее либо деактивировать плагин, либо деактивировать и удалить таблицы, которые создает плагин.

В панели настроек у меня есть следующая форма, которая позволяет администратору отметить чекбокс и отправить форму, что должно:

  1. Удалить таблицы, созданные плагином
  2. Деактивировать плагин
  3. Перенаправить обратно на страницу плагинов

Вот код моей страницы настроек:

<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" );
}

Как мне вызвать эту функцию, используя показанную форму?

0
Все ответы на вопрос 1
2

Вам просто нужно получить базовое имя любого плагина, чтобы деактивировать его.

if( $uninstall == true ) {
    delete_option( 'CHANGETHIS' ); // Удаляем настройку
    deactivate_plugins( plugin_basename( __FILE__ ) ); // Деактивируем плагин
}

Обычно они выглядят так: mypluginfolder/mypluginmasterfile.php

Попробуйте этот способ.


Есть несколько способов заставить это работать.

Если вы хотите добавить кнопку на страницу настроек для вызова этой функции, вы можете просто отправить POST-запрос на страницу настроек и проверить, была ли нажата кнопка удаления.

Например:

$uninstall = isset( $_POST[ 'uninstall' ] ) ? true : false; // Проверяем, была ли нажата кнопка удаления
9 нояб. 2011 г. 01:11:58
Комментарии

Спасибо, Grok - Как мне привязать функцию удаления к кнопке отправки в меню настроек, которое я создал?

Rob Rob
9 нояб. 2011 г. 13:19:06

Я обновил ответ, чтобы отразить способ достижения этого! Удачи.

Sterling Hamilton Sterling Hamilton
10 нояб. 2011 г. 08:12:44