可能であれば、インストールされたプラグイン(ファイルがwp-content/pluginsディレクトリに配置されていることを意味します)を他のプラグインからアクティブにするにはどうすればよいですか?
これは私がいくつかのウェブアプリでそれをやった方法です:
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' );
プラグインの有効化プロセスはWP管理インターフェースで動作するようにコーディングされています。エラーのあるプラグインを有効にするのを防ぐためにいくつかのチェックを実行します(起動時にこのようなロードを行うとWPが壊れる可能性があります)。
それはactivate_plugin()
function( 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で非常に予期しない結果がありました。
Wordpressには、 WP Codex に従ってプラグインを有効にする機能があります。
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');