Copot pemasangan skrip untuk plugin di Multisite


9

Saya baru menyadari bahwa uninstall.phpfile tradisional di sepanjang plugin tidak berfungsi di Multisite.

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

delete_option( 'plugin_option_name' );

Ini tidak menghapus opsi sub-situs di semua wp_SITE-ID_optionstabel.

Apakah ada cara standar untuk melakukan ini?

Jawaban:


8

Mencari di dalam semua uninstall.phpfile yang saya miliki di hard-drive saya, saya menemukan dua yang memiliki fungsi is_multisite(): User Role Editor dan Add Code to Head .

Keduanya menggunakan $wpdbloop. Sederhana:

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

T&J terkait: Copot pemasangan, Aktifkan, Nonaktifkan plugin: fitur khas & caranya


1
Anda lebih suka menggunakan restore_current_blogdaripada menyimpan id blog saat ini dan beralih kembali nanti
shea

@ Bungeshea, ya, jauh lebih elegan :) Saya akan mengedit Jawaban tetapi bertanya-tanya: Multisite uninstall.phptidak akan selalu berjalan dari blog ID == 1?
brasofilo

Anda hanya dapat menghapus plugin dari dasbor jaringan, yang ada di situs utama (blog id 1)
shea

Yap, tentu, dan, setelah semua, itu omong kosong menggunakan switch_to_blog(1)ketika kita memiliki restore_fungsi ... Jangan ingat persis di mana saya membaca sesuatu tentang mengubah contoh blog utama ...
brasofilo

Sudahkah Anda menguji ini secara menyeluruh? Melihat kode sumber, tampaknya uninstall.phpfile di dalam plugin hanya akan dipanggil jika 1) ada sebelum aktivasi plugin (jika demikian, nama plugin akan disimpan dalam tabel opsi blog); 2) saat menelepon get_option('uninstall_plugins')sebenarnya menghasilkan plugin tertentu. Tampaknya tidak berfungsi di Multisite karena info plugin seluruh jaringan disimpan dalam sitemetatabel, sebagai gantinya.
Tomas Buteler
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.