2010-03-10 232 views

回答

2

有幾個原因:

  • register_activation_hook是WP2 +,ADD_ACTION可用在此之前使用
  • register_activation_hook允許開發者指定函數所在的文件(雖然這似乎很少使用)
  • 對於我來說,register_activation_hook是「清潔」

所以我敢打賭,使用ADD_ACTION日期從2版或開發者之前的插件不知道register_activation_hook的

+0

謝謝亞當。我非常感謝在這裏,你幾乎總能得到一個簡潔明瞭的解釋。並迅速:) – 2010-03-10 14:48:50

+0

根據@nacin(WordPress的首席開發人員),你不應該使用激活鉤子(特別是在多站點上)。您應該這樣做: 「使用admin_init上的升級例程,並根據存儲的選項處理每個站點會更好。」 來源:https://core.trac.wordpress。 org/ticket/14170#comment:68 – Sam 2017-07-20 11:10:10

+0

有趣的,謝謝@Sam。這個討論是關於網絡(即多站點)安裝的具體討論,當我寫這個(我們有WPMU)時,我不認爲這是一個'事情' - 我會進一步閱讀,看看我是否可以更新我的答案。 – 2017-07-20 19:34:37

11

兩個做不同的事情,register_activation_hook用於註冊一個函數將在插件激活時(在Wordpress插件管理頁面上)調用一次,而掛鉤到init動作的函數將在每個請求中調用。

因此,通常的例子是使用激活函數來創建數據庫表,或者爲插件設置默認選項,然後使用動作函數加載翻譯後的字符串。

0

將「activate_plugin」函數掛接到init看起來要麼是很久以前完成的代碼,要麼是不瞭解register_activation_hook的人。第三種可能性是,儘管函數名稱是他們希望它運行,無論是否調用register_activation_hook。

例如,當更新插件時,該插件被停用並重新激活,但未激活該激活掛接。 (如果插件是通過FTP或類似的方式更新的話,肯定不會被調用)。因此,如果我在激活或更新時需要運行某些代碼,我可能會將其掛接到init。