wake-up-neo.net

Wie verhindere ich, dass ein Plugin beim Ausführen von WP-CLI geladen wird?

Ich verwende diesen Code derzeit in der Haupt-Plugins-Datei. Aber dieses Plugin ist nicht mein eigenes, daher würde ich es vorziehen, es normal zu aktualisieren, ohne jedes Mal diesen Code hinzuzufügen.

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

Ich muss dies tun, da dieses Plugin Fehler erzeugt und wp-cli anhält, um korrekt ausgeführt zu werden. Daher kann ich das Plugin nicht einfach mit wp-cli deaktivieren, meine Aufgaben ausführen und es wieder aktivieren.

Gibt es eine Möglichkeit, wie ich etwas wie if x then do not load plugin file x aus einem Mu-Plugin heraus machen kann?

11
NextGenThemes

Eines der ersten Dinge, die WordPress macht, um Plugins zu laden, ist das Abrufen der aktiven Plugins, wie sie in der Datenbank gespeichert sind:

$active_plugins = (array) get_option( 'active_plugins', array() );

Da get_option() verwendet wird, können wir den option_active_plugins Filter verwenden, um die Liste der aktiven Plugins im laufenden Betrieb zu ändern.

function wpse_301282_disable_plugin( $active_plugins ) {
    if ( defined( 'WP_CLI' ) && WP_CLI ) {
        $key = array_search( 'gravityforms/gravityforms.php', $active_plugins );

        if ( $key ) {
            unset( $active_plugins[$key] );
        }
    }

    return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );

Ersetzen Sie einfach gravityforms/gravityforms.php durch das Verzeichnis und den Dateinamen des Plugins, das Sie deaktivieren möchten.

Das Problem hierbei ist, dass wir versuchen, das Laden von Plugins zu beeinflussen. Daher können wir dies nicht über innerhalb eines Plugins ausführen, da es zu spät ist. Im Thema wäre es auch zu spät.

Zum Glück hat WordPress "Muss Plugins verwenden" dies sind Plugins, die Sie hinzufügen können und die vor und separat zu regulären Plugins geladen wurden und die nicht in der Liste der regulären Plugins aufgeführt sind.

Alles, was Sie tun müssen, um diesen Code zu einem Must Use Plugin hinzuzufügen, ist, ein wp-content/mu-plugins-Verzeichnis zu erstellen (falls es noch nicht existiert) und mit diesem Code eine PHP -Datei zu erstellen (es kann alles heißen) drin. Du brauchst keinen Plugin-Header oder irgendetwas anderes.

Jetzt wird dieser Code vor allen anderen Plugins geladen, wenn WordPress geladen wird. Da unser Filter aktiviert ist, wird WordPress, wenn es die Liste der aktiven Plugins zum Laden des zu deaktivierenden Plugins abruft, aus dieser Liste herausgefiltert, wenn WP-CLI aktiv ist.

11
Jacob Peattie

Sie können die Option skip-plugins in WP-CLI verwenden, um bei Verwendung von WP-CLI keine einzelnen Plugins zu laden.

Sie können es entweder in folgendem Befehl verwenden:

wp user list --skip-plugins=my-plugin

Oder Sie können dies zu Ihrer wp-cli.yml-Datei hinzufügen:

skip-plugins:
- my-plugin
13
swissspidy