web-dev-qa-db-ja.com

活性化エラー時にプラグインが自己を非活性化する

こんにちは私は誰かがここで正しい方向に私を指すことができるかどうか疑問に思っています。 deactivate_plugins()がどのように機能するのか理解できません。私はしばらくの間下記のバリエーションを使用してきました、そしてそれは最近までいつもうまくいくようでした。

register_activation_hook(__FILE__, 'my_plugin_activate_deactivate');
add_action('after_switch_theme', 'my_plugin_activate_deactivate');

function my_plugin_activate_deactivate() {
    if ( !function_exists ('mythemename') {
      deactivate_plugins( plugin_basename(__FILE__) );
    }
}

最初の問題は、register_activation_hook部分が何もしないということです... mythemename関数が存在するかどうかにかかわらず、プラグインはアクティブになります。

私もこれをやろうとしましたが、プラグインはまだアクティブにします。

register_activation_hook(__FILE__, 'my_plugin_activate_deactivate');

function my_plugin_activate_deactivate() {
      deactivate_plugins( plugin_basename(__FILE__) );
}

さらに悪いことには、テーマを切り替えるときにafter_switch_theme部分を使用すると500サーバーエラーが発生し、ftp/sftpを介してプラグインを手動で無効にする必要があります。

私の目標は、テーマがアクティブであるかどうかをチェックし、そうでない場合はそれ自体を非アクティブにする「テーマ機能プラグイン」を持つことです。私はここで何が足りないのですか?明らかな何か?私はスペルミスや何か愚かなことがあるように感じます。

更新:私はサーバー上でエラーログを有効にし、 deactivate_plugins() についてこのエラーを受け取っています:

Call to undefined function deactivate_plugins() in /path/to/plugin/plugin-name.php on line 25
1
Bryan Willis

あなたのコードにこの行を含める必要があるかもしれません

require_once( ABSPATH . 'wp-admin/includes/plugin.php' );

Plugin.phpファイルは自動的には含まれません。

2
RichyVN