問題描述

我試圖找出一些機制來載入外掛,根據頁面的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。