問題描述
我想知道是否是根據 WordPress 主題或外掛開發的一個很好的做法。
add_action('init','all_my_hooks');
function all_my_hooks(){
// some initialization stuff here and then
add_action('admin_init',-----);
add_action('admin_menu',----);
// more like so
}
謝謝
最佳解決方案
一般來說:是的,等待專用的鉤子來啟動你自己的程式碼。 Never 只是將物件例項引入全域性名稱空間。但是 init 很少需要。
你儘可能遲到。如果您的第一個程式碼執行在 wp_head 上,則不要使用較早的鉤子。你甚至可以 cascade hooks:
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// do something
// then
add_action( 'wp_footer', 'second_callback' );
}
關於 init 鉤子:改用 wp_loaded 。在 init 之後和 ms_site_check()被呼叫後執行。這樣您就可以避免在 multi-site 安裝中的無效子站點上執行外掛。一切都是一樣的
次佳解決方案
我沒有看到這種做法的巨大好處,原因如下:
註冊時不會呼叫回撥函式
add_action 和 add_filter 功能僅在全域性變數 $wp_filter 中新增一個條目,該變數儲存所有過濾器和操作。 See source 。它不會呼叫你的功能。只有當 do_action 和 apply_filters 被呼叫 (具有適當的掛鉤名稱) 時,您的程式碼才會執行,這些鉤子應該在那個地方發生得很晚。
你可能會說這樣做會使全域性變數 $wp_filter 變大=> 需要更多的記憶體。但是我認為建立一個新功能有同樣的問題。
組織程式碼
將所有內容都放在一個功能中,強制您記住主題/外掛中每個檔案中的所有鉤子。你不會這樣做:
-
在
header.php:新增鉤子和回撥函式的事情發生在標題 (如選單,註冊指令碼) -
在
content.php中:新增用於過濾內容的鉤子和回撥函式 -
admin-menu.php:新增鉤子和回撥函式來新增管理選單
(假設那些檔案放在你的主題/外掛中)
而不是這樣,你必須:
-
在
header.php,content.php,admin-menu.php中只放置回撥函式 -
並將所有鉤子分離在另一個檔案中
=> 這將使您很難知道當您檢視 header.php 檔案的內容時會發生什麼。您必須搜尋以知道這些回撥何時觸發。
並在您的主題/外掛中有多個課程時思考情況。你把所有班級的鉤子放在一個地方嗎?還是每個類都有一個包含所有鉤子的包裝函式?太多了!
以上這些原因,我認為這是個人風格:) 。我看到一些框架,如混合,你說的話。有時候這讓我很難在這些框架中挖掘!
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。