テーマを介したプラグイン/プラグインアクションを無効にする


19

私のサイトにGoogle Analyticatorプラグインをインストールしました。また、MobilePressプラグインを使用して、スマートフォン以外のモバイルブラウザー用に設計されたテーマを提供しています。このテーマで使用するためにモバイル向けGoogleアナリティクスを設定しましたが、Analyticatorプラグインには大きなjsファイルへの呼び出しが含まれているため、このプラグインを無効にします。

functions.phpまたは他の方法を使用してプラグインを無効にできるかどうかは誰にもわかりますか?

ページに機能を追加するコードを見つけたと思うので、プラグイン全体を無効にできない場合は、実行するアクションを停止できますか?私は幸運なしにそれらを直接無効にしようとしました。プラグインファイルのコードは次のとおりです。

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

私はこれらのアクションを削除しようとしました:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

どんな助けも大歓迎です。


私にとっては、これは技術的に機能しているはずなので、このコードを実行するタイミングに問題があります(早すぎるか遅すぎる)。詳細を入力してください。
11年

ええ、私もそれがうまくいくと思った。追加/削除アクションの経験があまりないため、さらにデバッグする方法がわかりませんでした。EAMannの答えはうまくいきましたが、どのような情報を探していましたか?
PNMG

私は少し混乱しています-永久に消える必要がある場合、通常の手段でプラグインを無効にする方が簡単ではありませんか?EAMannの答えは、コードだけです。何らかの条件でそれを動的に無効にする必要があると
思いました...-

通常のデスクトップブラウザーのワードプレスで設定されている通常のテーマがあります。このテーマでは、GAプラグインを使用します。mobilepressプラグインはphpを使用してユーザーエージェント文字列を取得し、スマートフォンまたは非スマートフォンに異なるテーマを提供します。非スマートフォンテーマ用のfunctions.phpファイルを使用して、GAプラグインがJSをそのテーマのみの<head>に配置しないようにしました。他の2つのテーマ(デスクトップとスマートフォン)で有効にする必要があります。それは明確にするのに役立ちますか?
PNMG

はい、そう思いました。ただし、非アクティブ化はプラグインを永続的に無効にし、明示的にアクティブ化されるまでオフのままになります。あなたのユースケースに合うとは思えません。
11年

回答:


25

WordPressがプラグインをアクティブにすると、activate_plugin()関数が呼び出されます。この関数は、サンドボックス内のプラグインをアクティブにし、成功すると他の場所にリダイレクトします。プラグインの依存関係をプログラムでアクティブにするために、数人の作成者によって使用されています。

deactivate_plugin()同様のことを逆に行う別の機能があります。これは、実際に「非アクティブ化」または「無効化」をクリックしたときにWordPressがプラグインを非アクティブ化する方法です。

インストールされたプラグインを無効にするには、次を呼び出します:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

または、複数のプラグインを一度に無効化するには:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

2番目のパラメーター(最初は無効にするプラグインの文字列または配列)があり、非アクティブ化フックを呼び出さずにプラグインを無効にできます。デフォルトではfalseに設定されているため、そのままにしておくことをお勧めします。何らかの理由で非アクティブ化をバイパスする場合を除き、次のようにします。

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

これはプラグインをオフにするだけですが、プラグインが非アクティブ化時に行うように登録したものは起動しません。そのため、プラグインが非アクティブ化されたときにオプションまたはdbテーブルを削除する場合、この「サイレント」非アクティブ化を実行して、その情報を保持し、他の場所で使用します。


優れた答え-他と比較するだけでなく、たとえば、どこかにあるかもしれない「ウェブサイトはここにあります」という回答が不足しているとしましょう。
編集者

functions.phpに配置されたこのコードは、管理者のプラグインを無効にし、他の2つのテーマからプラグインを無効にします。指摘してくれたRarstに感謝します。functions.phpファイルが置かれている1つのテーマでそれを無効にしたかっただけです。
-PNMG

特定のサイトで一度に使用できるテーマは1つだけですが、テーマを無効にした後にプラグインを再度有効にしたい場合も可能です。
-EAMann

11

これは上記のEAMannのすばらしい回答のおかげです。元のポスターにも役立つと思いました...

ユーザーがプレミアムバージョンをアップロードした場合にプラグインを無効にすることを確認するソリューションが必要でした(潜在的な競合を避けるため)。以前は、is_plugin_activeでその状態を検出し、ユーザーにスイッチをオフにするように促す管理者エラーメッセージを表示しました。これは非常にスムーズです...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

注:register_activation_hookでは機能しなかったようですが、admin_initは魅力のように機能します。


1
ただ、私はそれが再びそれを行う必要はありませんので、is_plugin_activeがすでにdeactivate_pluginsフックにチェックされているかなり確信して注意する
ブライアン・ウィリスを

1

私のソリューションは次のとおりです。他のプラグインを無効にできるプラグインを作成します。

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

これを実稼働環境にプッシュして有効にし、ローカルの開発マシンにデータベースをダウンさせます。

ソース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.