回答:
これは私がいくつかのウェブアプリでそれをした方法です:
function run_activate_plugin( $plugin ) {
$current = get_option( 'active_plugins' );
$plugin = plugin_basename( trim( $plugin ) );
if ( !in_array( $plugin, $current ) ) {
$current[] = $plugin;
sort( $current );
do_action( 'activate_plugin', trim( $plugin ) );
update_option( 'active_plugins', $current );
do_action( 'activate_' . trim( $plugin ) );
do_action( 'activated_plugin', trim( $plugin) );
}
return null;
}
run_activate_plugin( 'akismet/akismet.php' );
activate_plugin()
、同じように動作するようです。
プラグインのアクティベーションプロセスは、WP管理インターフェイスで動作するようにコーディングされています。エラーのあるプラグインの有効化を防ぐためにいくつかのチェックを実行します(起動時にロードするとWPが壊れる場合があります)。
他の場所では使用できないとして文書化されているactivate_plugin()
関数(source)によって処理されます。
したがって、コードでプラグインをアクティブにしたい場合、目標自体は比較的簡単active_plugins
です。そのプラグインを含めるようにオプションを変更します。ただし、関連するアクティベーションフックを最初から再作成する必要があり、サンドボックスステップなしでアクティベーションを行うとサイトが破損する危険があります。
プラグインは、「active_plugins」オプションの配列に保存されます。配列には、アクティブな各プラグインへのファイルパスが含まれます。
プラグインを有効にするには、そのパスを決定し、そのパスをに渡す必要がありますactivate_plugin($plugin_path)
。
しかし、これは言うよりも簡単であり、(少なくとも2.9では)コアコードでは簡単になりません。
activate_plugin()を実行する前に、wp-admin / includes /からplugin.phpファイルを含める必要があります。プラグインがまだアクティブになっていないことも確認する必要があります。結果は次のようになります(YMMV):
// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
return;
// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);
私はWP 2.9の実稼働環境でこれを使用しており、大きな問題はありませんでしたが、テストではWPMUで非常に予期しない結果が発生したため、ネットワークインストールでこれを使用してください。
WP Codexによると、Wordpressはプラグインをアクティブにする機能を提供します
function plugin_activation( $plugin ) {
if( ! function_exists('activate_plugin') ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if( ! is_plugin_active( $plugin ) ) {
activate_plugin( $plugin );
}
}
plugin_activation('akismet/akismet.php');
WordPressのデフォルトの関数を呼び出すだけです。
activate_plugin('akismet/akismet.php');
詳細については、以下のリンクを確認してください。