Скрипт удаления плагина в мультисайте


Я только что понял, что традиционный uninstall.php файл с подключаемым модулем не работает в многосайтовом режиме.

if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

delete_option( 'plugin_option_name' );

Это не удаляет параметры подсайтов во всех таблицах wp_SITE-ID_options.

Существует ли стандартный способ сделать это?

Author: brasofilo, 2013-01-13

1 answers

Поиск во всех файлах uninstall.php, которые у меня есть на жестком диске, я нашел два, которые имели функцию is_multisite(): Редактор ролей пользователя и Добавляют код в заголовок.

Оба используют цикл $wpdb. Упрощенный:

<?php
/**
 * Plugin Uninstall Procedure
 */

// Make sure that we are uninstalling
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

// Leave no trail
$option_name = 'plugin_option_name';

if ( !is_multisite() ) 
{
    delete_option( $option_name );
} 
else 
{
    global $wpdb;
    $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
    $original_blog_id = get_current_blog_id();

    foreach ( $blog_ids as $blog_id ) 
    {
        switch_to_blog( $blog_id );
        delete_option( $option_name );     

        // OR
        // delete_site_option( $option_name );  
    }

    switch_to_blog( $original_blog_id );
}

Вопросы и ответы по теме: Удаление, активация, деактивация плагина: типичные функции и инструкции

 8
Author: brasofilo, 2017-04-13 12:37:52