問題描述

我試圖找出一些機制來加載插件,根據頁面的 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 方法,這在我看來只適用於 non-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;
}

Background

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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。