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