問題描述

我想知道是否是根據 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。