web-dev-qa-db-ja.com

プラグインの選択的ロードを実装するための戦略

パフォーマンスを向上させるために、ページの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以外の環境にのみ適しています。そうでなければ、オプションの変更はアトミックではないでしょう。)

選択的プラグインロードを実装する方法がまだあるのかどうか疑問に思いますか。

7
He Shiming

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になります。

7
fuxia

これがあなたのajax呼び出しに役立つかどうかはわかりませんが、 Plugin Organizer はURLに基​​づいて他のプラグインを選択的にロードすることを可能にするよくサポートされたプラグインです。私のサイトではとてもうまくいきます。

0
lflier