問題描述

我想知道是否是根據 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_actionadd_filter 功能僅在全域性變數 $wp_filter 中新增一個條目,該變數儲存所有過濾器和操作。 See source 。它不會呼叫你的功能。只有當 do_actionapply_filters 被呼叫 (具有適當的掛鉤名稱) 時,您的程式碼才會執行,這些鉤子應該在那個地方發生得很晚。

你可能會說這樣做會使全域性變數 $wp_filter 變大=> 需要更多的記憶體。但是我認為建立一個新功能有同樣的問題。

組織程式碼

將所有內容都放在一個功能中,強制您記住主題/外掛中每個檔案中的所有鉤子。你不會這樣做:

  • header.php:新增鉤子和回撥函式的事情發生在標題 (如選單,註冊指令碼)

  • content.php 中:新增用於過濾內容的鉤子和回撥函式

  • admin-menu.php:新增鉤子和回撥函式來新增管理選單

(假設那些檔案放在你的主題/外掛中)

而不是這樣,你必須:

  • header.phpcontent.phpadmin-menu.php 中只放置回撥函式

  • 並將所有鉤子分離在另一個檔案中

=> 這將使您很難知道當您檢視 header.php 檔案的內容時會發生什麼。您必須搜尋以知道這些回撥何時觸發。

並在您的主題/外掛中有多個課程時思考情況。你把所有班級的鉤子放在一個地方嗎?還是每個類都有一個包含所有鉤子的包裝函式?太多了!

以上這些原因,我認為這是個人風格:) 。我看到一些框架,如混合,你說的話。有時候這讓我很難在這些框架中挖掘!

參考文獻

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