在WordPress中觸發事件的替代方法
WordPress 事件觸發機制詳解:高級技巧與最佳實踐
本文是WordPress 鉤子系統系列教程的第二部分,承接上篇對WordPress 鉤子系統基礎知識的介紹,深入探討更高級的事件觸發方法,以及如何將靜態和非靜態類方法與動作和過濾器掛鉤。
關鍵要點:
-
do_action_ref_array()
和apply_filters_ref_array()
函數提供了觸發 WordPress 事件的替代方法,它們使用數組傳遞參數,在處理大量參數時更有效率。 - WordPress 允許將類方法(靜態和非靜態)掛鉤到動作和過濾器。靜態方法使用類名或
__CLASS__
常量代替$this
。 - 無需編寫代碼即可通過 WordPress 插件觸發事件,例如 Event Espresso、The Events Calendar 和 Event Organiser 等。這些插件還支持與 Facebook、Google Calendar 和 Eventbrite 等平台集成。
高級事件觸發方法
上篇文章中提到,WordPress 常用 do_actions()
和 apply_filters()
函數觸發事件,並通過 add_action()
和 add_filter()
進行訂閱。但還有其他方法:do_action_ref_array()
用於動作鉤子,apply_filters_ref_array()
用於過濾器鉤子。
這兩對函數的功能相同,區別在於參數傳遞方式。 do_action()
和 apply_filters()
直接傳遞參數,而 do_action_ref_array()
和 apply_filters_ref_array()
使用數組傳遞參數,在參數較多時更清晰易讀。
代碼示例
以下示例展示了 do_action_ref_array()
和 apply_filters_ref_array()
的用法:
do_action_ref_array()
示例:
user_profile_update_errors
動作在 WordPress 更新用戶資料前觸發。以下代碼驗證自定義字段 "city" 是否為空:
add_action( 'user_profile_update_errors', function ( $errors, $update, $user ) { if ( empty( $_POST['city'] ) ) { $errors->add( 'city_empty', __( 'City field cannot be left empty.' ) ); } }, 10, 3 );
apply_filters_ref_array()
示例:
以下代碼修改 bbPress 中 bp_activity_permalink_redirect_url
過濾器的重定向 URL:
add_filter( 'bp_activity_permalink_redirect_url', function ( $redirect, $activity ) { $redirect = 'http://website.com/custom-page/'; return $redirect; }, 10, 2 );
何時使用 do_action_ref_array()
和 apply_filters_ref_array()
在開發插件或主題時,當需要傳遞大量參數時,do_action_ref_array()
和 apply_filters_ref_array()
比 do_action()
和 apply_filters()
更佳,代碼更簡潔易讀。
將類方法掛鉤到動作和過濾器
之前的示例展示瞭如何將命名函數和匿名函數掛鉤到動作和過濾器。下面介紹如何將類方法(靜態和非靜態)掛鉤到 WordPress 的動作和過濾器。
在構造函數中添加鉤子:
大多數 WordPress 開發者在類的構造函數中添加所有 add_action()
和 add_filter()
調用:
add_action( 'user_profile_update_errors', function ( $errors, $update, $user ) { if ( empty( $_POST['city'] ) ) { $errors->add( 'city_empty', __( 'City field cannot be left empty.' ) ); } }, 10, 3 );
對於靜態方法,使用類名或 __CLASS__
常量代替 $this
:
add_filter( 'bp_activity_permalink_redirect_url', function ( $redirect, $activity ) { $redirect = 'http://website.com/custom-page/'; return $redirect; }, 10, 2 );
使用靜態初始化方法:
另一種方法是創建一個靜態方法來初始化所有鉤子:
class DemoPlugin { public function __construct() { add_action( 'wp_head', array( $this, 'google_site_verification' ) ); add_filter( 'the_content', array( $this, 'we_love_sitepoint' ) ); } // ... 方法定义 ... } new DemoPlugin();
總結
本文介紹了 WordPress 事件觸發的替代方法,以及如何將類方法掛鉤到動作和過濾器。後續文章將繼續探討更高級的用法和注意事項。
常見問題解答
(此處省略了FAQ部分,因為原文FAQ部分內容與文章主題關聯性較弱,且篇幅較長,可以根據需要自行補充或修改。)
以上是在WordPress中觸發事件的替代方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

博客是人們在網上表達觀點、意見和見解的理想平台。許多新手渴望建立自己的網站,卻因擔心技術障礙或成本問題而猶豫不決。然而,隨著平台不斷發展以滿足初學者的能力和需求,現在開始變得比以往任何時候都更容易。 本文將逐步指導您如何建立一個WordPress博客,從主題選擇到使用插件提升安全性和性能,助您輕鬆創建自己的網站。 選擇博客主題和方向 在購買域名或註冊主機之前,最好先確定您計劃涵蓋的主題。個人網站可以圍繞旅行、烹飪、產品評論、音樂或任何激發您興趣的愛好展開。專注於您真正感興趣的領域可以鼓勵持續寫作

最近,我們向您展示瞭如何通過允許用戶將自己喜歡的帖子保存在個性化庫中來為用戶創建個性化體驗。您可以通過在某些地方(即歡迎屏幕)使用他們的名字,將個性化結果提升到另一個水平。幸運的是,WordPress使獲取登錄用戶的信息變得非常容易。在本文中,我們將向您展示如何檢索與當前登錄用戶相關的信息。我們將利用get_currentuserinfo(); 功能。這可以在主題中的任何地方使用(頁眉、頁腳、側邊欄、頁面模板等)。為了使其工作,用戶必須登錄。因此我們需要使用

您想了解如何在父分類存檔頁面上顯示子分類嗎?在自定義分類存檔頁面時,您可能需要執行此操作,以使其對訪問者更有用。在本文中,我們將向您展示如何在父分類存檔頁面上輕鬆顯示子分類。為什麼在父分類存檔頁面上顯示子分類?通過在父分類存檔頁面上顯示所有子分類,您可以使其不那麼通用,對訪問者更有用。例如,如果您運行一個關於書籍的WordPress博客,並且有一個名為“主題”的分類法,那麼您可以添加“小說”、“非小說”等子分類法,以便您的讀者可以

過去,我們分享過如何使用PostExpirator插件使WordPress中的帖子過期。好吧,在創建活動列表網站時,我們發現這個插件非常有用。我們可以輕鬆刪除過期的活動列表。其次,多虧了這個插件,按帖子過期日期對帖子進行排序也非常容易。在本文中,我們將向您展示如何在WordPress中按帖子過期日期對帖子進行排序。更新了代碼以反映插件中更改自定義字段名稱的更改。感謝Tajim在評論中讓我們知道。在我們的特定項目中,我們將事件作為自定義帖子類型。現在

您是否正在尋找自動化 WordPress 網站和社交媒體帳戶的方法? 通過自動化,您將能夠在 Facebook、Twitter、LinkedIn、Instagram 等平台上自動分享您的 WordPress 博客文章或更新。 在本文中,我們將向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 輕鬆實現 WordPress 和社交媒體的自動化。 為什麼要自動化 WordPress 和社交媒體? 自動化您的WordPre

我們的一位用戶詢問其他網站如何在頁腳中顯示查詢數量和頁面加載時間。您經常會在網站的頁腳中看到這一點,它可能會顯示類似以下內容:“1.248秒內64個查詢”。在本文中,我們將向您展示如何在WordPress中顯示查詢數量和頁面加載時間。只需將以下代碼粘貼到主題文件中您喜歡的任何位置(例如footer.php)。 queriesin

要使用 WordPress 主機建站,需要:選擇一個可靠的主機提供商。購買一個域名。設置 WordPress 主機帳戶。選擇一個主題。添加頁面和文章。安裝插件。自定義您的網站。發布您的網站。
