私は現在、メインのプラグインファイル自体でこのコードを使用しています。しかし、そのプラグインは私自身のものではないので、このコードを追加するたびに通常どおりアップグレードできるようにしたいと思います。
if ( defined( 'WP_CLI' ) && WP_CLI ) {
exit;
}
このプラグインはエラーを発生させwp-cliを正しく実行するのを止めるのでこれをする必要があります。したがってwp-cliでプラグインを無効にし、タスクを実行して再度有効にすることはできません。
私はmuプラグインの中からif x then do not load plugin file x
のようなことをすることができる方法がありますか?
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
を無効にしたいプラグインのディレクトリとファイル名に置き換えてください。
ここでの問題は、プラグインのロードに影響を与えようとしているため、プラグインの within からは実行できないことです。遅すぎるためです。テーマも遅すぎます。
ありがたいことにWordPressは "Must Use Plugins"を持っています これらは通常のプラグインの前に別々にロードされ追加できるプラグインで、通常のプラグインリストには表示されません。
このコードをMust Use Pluginに追加するために必要なことは、wp-content/mu-plugins
ディレクトリを作成し(まだ存在していない場合)、そのコードを使用してPHPファイルを作成することです。その中に。あなたはプラグインヘッダや他の何かを必要としません。
WordPressがロードされると、そのコードは他のすべてのプラグインの前にロードされます。私たちのフィルタが設定されているので、WordPressがアクティブなプラグインのリストを取得してプラグインをロードするとき、WP-CLIがアクティブであれば無効にしたいプラグインはそのリストから除外されます。
WP-CLIでskip-plugins
オプションを使用すると、WP-CLIを使用しているときに個々のプラグインをロードしないようにできます。
次のようにコマンドで使用することもできます。
wp user list --skip-plugins=my-plugin
または、これをwp-cli.yml
ファイルに追加することもできます。
skip-plugins:
- my-plugin