パフォーマンスを向上させるために、ページのURLに応じて、プラグインをオンデマンドでロードするための何らかのメカニズムを見つけようとしています。
私の主な関心事は、ユーザーがページでアクティブになっている間に繰り返し発生するadmin-ajax.php呼び出しがいくつかあることです。私はこれらの呼び出しをプロファイリングしようとしました、そしてajax呼び出しのためにロードされたプラグインの大部分が不要であることを発見しました。
私はis_admin()
を使ってajax呼び出しを識別することができましたが、私はWordPressとプラグインコードをそのままにしておきたいのです。さらに、is_admin()
はajax呼び出しと管理パネルを区別しません。
私はプラグインのロード手順を調べています。私は'muplugins_loaded'
、'plugins_loaded'
アクションを見ただけで、ロードプロセスを利用するためのフィルターはありませんでした。私はwp_get_active_and_valid_plugins
をチェックしました、そしてそれはプラグインのロードを変更する唯一の方法は明示的にupdate_option('active_plugins')
にすることであるように見えます、それは実行可能なオプションではありません。他のものはハードコーディングされています。
(私はこのプラグイン http://wordpress.org/extend/plugins/selective-loading/ / update_option
メソッドを使用しています。これは私の考えではajax以外の環境にのみ適しています。そうでなければ、オプションの変更はアトミックではないでしょう。)
選択的プラグインロードを実装する方法がまだあるのかどうか疑問に思いますか。
option_active_plugins
をフィルタリングします。データベースを実際に変更することなく、ここでget_option()
の結果を変更できます。
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
add_filter( 'option_active_plugins', 'disable_plugins_temporary' );
function disable_plugins_temporary( $plugins )
{
// unset plugins you don't need, then
return $plugins;
}
wp_get_active_and_valid_plugins()
はget_option( 'active_plugins', array() )
を呼び出してアクティブなプラグインを取得します。 get_option( $option, $default = false )
には、このフィルタがあります。
return apply_filters( 'option_' . $option, maybe_unserialize( $value ) );
そのため、フィルタの名前はoption_active_plugins
になります。
これがあなたのajax呼び出しに役立つかどうかはわかりませんが、 Plugin Organizer はURLに基づいて他のプラグインを選択的にロードすることを可能にするよくサポートされたプラグインです。私のサイトではとてもうまくいきます。