WP-CLIを実行するときにプラグインが読み込まれないようにするにはどうすればよいですか?


12

現在、このコードをメインのプラグインファイル自体で使用しています。しかし、そのプラグインは私自身のものではないので、このコードを追加するたびに通常どおりにプラグインをアップグレードできるようにしたいと思います。

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

このプラグインはエラーを生成し、wp-cliを正しく実行するために停止するため、これを行う必要があります。wp-cliでプラグインを無効にして、タスクを実行し、再度有効にすることはできません。

if x then do not load plugin file xmuプラグイン内から何かを行う方法はありますか?

回答:


12

WordPressがプラグインをロードするために最初に行うことの1つは、データベースに保存されているアクティブなプラグインを取得することです。

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

これを使用しget_option()ているため、option_active_pluginsフィルターを使用してアクティブなプラグインのリストをオンザフライで変更できます。

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' );

gravityforms/gravityforms.php無効にするプラグインのディレクトリとファイル名に置き換えるだけです。

ここでの問題は、プラグインのロードに影響を与えようとしているため、遅すぎるため、プラグインから影響を与えることができないことです。テーマも遅すぎるでしょう。

ありがたいことに、WordPressには「Must Use Plugins」がありますこれらは、通常のプラグインの前に個別に読み込まれる追加可能なプラグインであり、通常のプラグインリストには表示されません。

このコードを必須のプラグインに追加するために必要なことは、wp-content/mu-pluginsディレクトリを作成し(まだ存在しない場合)、そのコードを含むPHPファイル(何でも呼び出すことができます)を作成することです。プラグインヘッダーなどは必要ありません。

これで、WordPressが読み込まれるときに、他のすべてのプラグインの前にそのコードが読み込まれます。フィルターが設定されているため、WordPressがアクティブなプラグインのリストを取得して、無効にするプラグインをロードすると、WP-CLIがアクティブな場合、そのリストからフィルターで除外されます。


同じ考えを持っていたが、これは機能しません。少なくとも私のローカル環境では。get_option()値がトランジェント/類似で保存され、このフィルターがスキップされると、おそらく早く戻りますか?(ほとんどの場合、機能しません。実際に実行された管理プラグイン画面でのみ)
kero

うん ソースを見て、私が知る限り、option_フィルタが適用されない唯一の理由は、値がなくデフォルトを返す場合です。
Jacob Peattie

実際にはそうでした(アクティブなプラグインはありません)。テスト環境をクリーンに保つ必要はありません..
kero

1
私の場合はそれが必要だったので、私はこれを受け入れました。一般的には--skip-plugin=x、wp-cliのオプションがより良い方法かもしれませんが。
NextGenThemes

15

skip-pluginsWP-CLIのオプションを使用して、WP-CLIの使用時に個々のプラグインを読み込まないようにすることができます。

次のようなコマンドで使用できます。

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

または、これをwp-cli.ymlファイルに追加できます。

skip-plugins:
- my-plugin

-1

プラグインのディレクトリ名を変更するだけで無効になります。プラグインを一時的に無効にするために時々それをします[linux]:

mv my-plugin-dir renamed-my-plugin-dir

OPは、WP-CLIを使用するときだけプラグインをスキップしたいのですが、同時に発生する可能性のある他のアクティビティは必要ありません
Mark Kaplun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.