web-dev-qa-db-ger.com

Plugins nach einer Aktion selbst deaktivieren

Ich entwickle ein WordPress-Plugin.

Ich möchte eine Datei von einem Server herunterladen, entpacken und nach Aktivierung des Plugins im Hauptverzeichnis von WordPress ablegen. Der Vorgang des Herunterladens und Entpackens der Datei läuft korrekt, ich habe einige Probleme, das Plugin zu deaktivieren, nachdem dieser Vorgang abgeschlossen ist. Wie kann ich es reparieren?

class WP_X_Plugin{

public function __construct(){
    register_activation_hook( __FILE__, array( $this , 'activate' ) );

    $url = "http://mysitedomain.com/script/dist.Zip";
    file_put_contents("dist.Zip", file_get_contents($url));

    $plugin_Zip = new ZipArchive;

    $plugin_Zip->open('dist.Zip');
    $plugin_Zip->extractTo(ABSPATH);
    $plugin_Zip->close();

    rename('dist.php', ABSPATH.'/wp-script.php');
    if( unlink('dist.Zip') ){
      // if i call the deactivate_plugins() function of wordpress, I will have an error logged in console PHP Fatal error:  Uncaught Error: Call to undefined function deactivate_plugins().
      deactivate_plugins( plugin_basename(__FILE__) );
      header('Location: wp-script.php');
    }
}

}

$wp_x = new WP_X_Plugin;

UPDATE

Ich habe das Problem dadurch gelöst, dass ich die plugin.php-Datei im wp-admin/includes-Ordner benötige. Ich habe diese Lösung verwendet, nachdem ich einige Fragen zum gleichen Thema gelesen habe. Soweit ich weiß, sind die Plugins-Funktionen nur verfügbar, wenn wp diese Datei bereits zur Laufzeit geladen hat.

1
user9741470

Die Funktion disable_plugins () ist erst verfügbar, nachdem die Aktion admin_init ausgeführt wurde. Sie müssen entweder den Filter admin_init registrieren und die Funktion disable_plugins () ausführen oder die Datei wp-admin/includes/plugin.php manuell einfügen.

Ich habe Ihren Code mit der zweiten Lösung unten aktualisiert.

class WP_X_Plugin{

    public function __construct(){
        register_activation_hook( __FILE__, array( $this , 'activate' ) );

        $url = "http://localhost/dist.Zip";
        file_put_contents("dist.Zip", file_get_contents($url));

        $plugin_Zip = new ZipArchive;

        $plugin_Zip->open('dist.Zip');
        $plugin_Zip->extractTo(ABSPATH);
        $plugin_Zip->close();

        rename('dist.php', ABSPATH.'/wp-script.php');
        if( unlink('dist.Zip') ){
            include_once ABSPATH . '/wp-admin/includes/plugin.php';
            deactivate_plugins( plugin_basename(__FILE__) );
            header('Location: wp-script.php');
        }
    }  

    public function activate() {

    }
}

$wp_x = new WP_X_Plugin;

Übrigens. Anstelle der Funktion header () können Sie auch die Funktion wp_redirect () verwenden oder zumindest 'exit' hinzufügen. nach dem Aufruf von header ().

Außerdem wird Ihr Code jetzt bei jedem Seitenaufruf einschließlich der WP_X_Plugin-Aktivierung ausgeführt und deaktiviert sich selbst, sodass die Umleitung möglicherweise ignoriert wird.

1
Greg Winiarski