web-dev-qa-db-ja.com

特定のテーマに対してアクティブなプラグインを無効にする

特定のテーマからいくつかのプラグインを無効にしたいのですが、無効にするには deactivate_plugins フックを使用しています。以下は私のコードです。

add_action('wp_head','disable_plugins');
function disable_plugins(){
    include_once(ABSPATH.'wp-admin/includes/plugin.php');
    $current_theme = wp_get_theme();
    $current_theme_name = $current_theme->Name;

    if($current_theme_name == 'Twenty Sixteen'){
        if ( is_plugin_active('press-release/init.php') ) {
            deactivate_plugins('press-release/init.php');    
        }
    }
}

このコードはwp_headフックでプラグインを無効にしますが、テーマが26のときだけアクティブプラグインを無効にし、他のテーマで有効または無効にしておきたいという問題があります。

しかし私のコードはすべてのテーマのプラグインを無効にします。 :(

他の解決策は各プラグインのcssファイルとjsファイルの登録を解除することでしたが、すべてのプラグインのすべてのcssファイルとjsファイルを見つけるのは困難です。

この場合あなたができるなら私を助けてください。ありがとう。

1
Bhuvnesh Gupta

コメントに@Sumitが言っていること(そしてあなたが自分で見つけたこと)は正しいです。テーマ内で プラグインを非アクティブ化する場合 は、再度アクティブ化されるまで永久に非アクティブ化されます。

また、無効化アクションをwp_headにアタッチすると、ページロードごとに実行されますが、これは必須ではありません。あなたがする必要があるのはテーマが活性化されたときにプラグインを非活性化し、他のテーマが活性化されたときにプラグインを再活性化することです。これにはアクションフックがあります:起動時に after_switch_theme 、無効化時に switch_theme 。だからあなたは持っているでしょう:

add_action('after_switch_theme','disable_plugins');
add_action('switch_theme','enable_plugins');

あなたはすでにdisable_plugins関数を持っています、もう一つはあなたが自分で書く必要があるでしょう。

1
cjbj