Deinstallieren Sie das Skript für ein Plugin in Multisite


9

Ich habe gerade festgestellt, dass die herkömmliche uninstall.phpDatei entlang eines Plugins in Multisite nicht funktioniert.

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

delete_option( 'plugin_option_name' );

Dadurch werden die Unterwebsites nicht in allen wp_SITE-ID_optionsTabellen gelöscht .

Gibt es einen Standardweg dafür?

Antworten:


8

Beim Durchsuchen aller uninstall.phpDateien auf meiner Festplatte habe ich zwei gefunden, die die Funktion hatten is_multisite(): Benutzerrollen-Editor und Code zum Kopf hinzufügen .

Beide verwenden eine $wpdbSchleife. Vereinfacht:

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

Verwandte Fragen und Antworten: Ein Plugin deinstallieren, aktivieren, deaktivieren: typische Funktionen und Anleitungen


1
Sie sollten verwenden, restore_current_bloganstatt die aktuelle Blog-ID zu speichern und später zurückzuschalten
shea

@bungeshea, ja, viel eleganter :) Ich wollte gerade die Antwort bearbeiten, frage mich aber: Multisite uninstall.phpwird nicht immer von der Blog-ID == 1 ausgeführt?
Brasofilo

Sie können Plugins nur aus dem Netzwerk-Dashboard löschen, das sich auf der Hauptseite befindet (Blog-ID 1)
shea

Ja, sicher, und schließlich ist es Unsinn, switch_to_blog(1)wenn wir die restore_Funktion haben ... Erinnern Sie sich nicht genau, wo ich etwas über das Ändern der Haupt-Blog-Instanz gelesen habe ...
brasofilo

Haben Sie das gründlich getestet? Wenn man sich den Quellcode ansieht, scheint es, dass die uninstall.phpDatei in einem Plugin nur aufgerufen wird, wenn 1) sie vor der Aktivierung des Plugins existiert (wenn ja, wird der Name des Plugins in der Optionstabelle des Blogs gespeichert); 2) Wenn Sie aufrufen, erhalten Sie get_option('uninstall_plugins')tatsächlich dieses spezifische Plugin. Auf Multisite scheint dies nicht zu funktionieren, da stattdessen netzwerkweite Plugin-Informationen in der sitemetaTabelle gespeichert sind .
Tomas Buteler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.