搜尋
首頁後端開發php教程解析WordPress中hook的使用

解析WordPress中hook的使用

Dec 27, 2017 pm 05:59 PM
hookwordpress使用

本文主要介紹了解析WordPress中函數鉤子hook的作用及基本用法,hook是WordPress中呼叫函數的重要用法,也是外掛程式開發的基礎。希望對大家有幫助。

WordPress 的外掛機制實際上隻的就是這個 Hook 了,它中文被翻譯成鉤子,允許你參與 WordPress 核心的運行,是一個非常棒的東西,下面我們來詳細了解它。
鉤子分類

鉤子分成兩種,一種叫做動作(action),還有一種叫做過濾器(filter)。這兩種鉤子實作原理基本上一樣,後邊會講到,使用上的差別在於過濾器有回傳值,而動作沒有。

動作的概念是讓你在一個情況或一個特別的位置執行一些函數,例如發送一封郵件等;過濾器則是讓你修改WordPress 核心需要用到的一個值,然後WordPress再用這些值做一些事情,例如函數的回傳值等。

動作鉤子

wp_head 是一個很常用的動作鉤子,在開發主題過程中,開發者都會在head 標籤裡加上wp_head() 函數,事實上,正是這個函數呼叫了wp_head 鉤子。

如果外掛程式開發者想要在 head 標籤裡加入一句話,就可以使用 wp_head 鉤子,下邊是個簡單的範例。


//在 head 标签添加一些内容
function Bing_add_head_tag(){
  echo '添加内容';
}
add_action( 'wp_head', 'Bing_add_head_tag' );


新增程式碼後,查看前台的網頁原始碼,就能在 head 標籤裡看到我們新增的內容了。

20151222154540066.png (437×83)

上邊是一個簡單的例子,只是印了一句話。利用這個鉤子,我們還可以做一個遇到 404 頁面給管理員發送一封郵件的插件,下邊簡單的寫了一個。


//遇到 404 页面给管理员发送邮件
function Bing_404_page_mail(){
  if( !is_404() ) return;//如果不是 404 页面就退出函数
  $to = get_option( 'admin_email' );//获取管理员地址
  $subject = '遇到 404 页面啦!';//邮件标题
  $message = '404 页面的地址:http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];//邮件内容
  wp_mail( $to, $subject, $message );//发送邮件
}
add_action( 'wp_head', 'Bing_404_page_mail' );


#過濾器鉤子

根據我的親身經歷,可能過濾器鉤子會難理解些,尤其對不熟悉PHP 的人來說。

過濾器鉤子可以讓你改變一些東西的值,過濾器回呼函數會接受一個參數,這就是目前的值。還記得那個用來呼叫文章內容的 the_content() 函數吧,這個函數就提供了一個 the_content 過濾器。

為 the_content 鉤子新增一個函數,這個函數需要接收一個參數,而這個參數就是目前的值。


//文章内容全部链接新窗口打开
function Bing_autoblank( $content ){//$content 变量就是文章内容,因为其它过滤器也要过滤,所以这个内容可能是经过其它函数过滤的
  $content = str_replace( &#39;<a&#39;, &#39;<a target="_blank"&#39;, $content );//添加 target="_blank"
  return $content;//必须要把过滤后的内容返回回去,否则值就丢了
}
add_filter( &#39;the_content&#39;, &#39;Bing_autoblank&#39; );


鉤子原則

事實上,在呼叫add_action() 和add_filter( ) 的時候,只是在$wp_filter 全域變數中加入了一個數組元素,還要說的就是動作和過濾器是公用的一個全域變量,也就是說,過濾器和動作是不能重名的。

當呼叫 do_action() 的時候,會尋找 $wp_filter 全域變數中都有哪些加入到此動作的函數,循環執行即可。

apply_filters() 比 do_action() 多了一個步奏,就是每次呼叫函數時還要接收這個函數的回傳值,最後把經過多次過濾的值回傳出去,供使用。

取得目前鉤子清單
WordPress 的動作和過濾器是外掛機制的核心部分,允許你在特定的地方主動加入自己需要執行的動作,一般使用add_action() 和add_filter() 函數掛載函數。

這些鉤子被儲存在 $wp_filter 全域變數裡,所以,要取得鉤子列表,可以直接取得 $wp_filter 全域變數。


<pre class="brush:php;toolbar:false"><?php var_dump( $GLOBALS[&#39;wp_filter&#39;] ); ?>


上邊的程式碼會印出鉤子清單。

20151222154645343.png (388×432)

相關推薦:

WordPress中如何進行常規設定

使用WordPress開發微信小程式實戰教學

#WordPress中用於建立以及取得側邊欄的PHP函數實例講解

以上是解析WordPress中hook的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

您應該多久再生一次會話ID?您應該多久再生一次會話ID?Apr 23, 2025 am 12:03 AM

會話ID應在登錄時、敏感操作前和每30分鐘定期重新生成。 1.登錄時重新生成會話ID可防會話固定攻擊。 2.敏感操作前重新生成提高安全性。 3.定期重新生成降低長期利用風險,但需權衡用戶體驗。

如何在PHP中設置會話cookie參數?如何在PHP中設置會話cookie參數?Apr 22, 2025 pm 05:33 PM

在PHP中設置會話cookie參數可以通過session_set_cookie_params()函數實現。 1)使用該函數設置參數,如過期時間、路徑、域名、安全標誌等;2)調用session_start()使參數生效;3)根據需求動態調整參數,如用戶登錄狀態;4)注意設置secure和httponly標誌以提升安全性。

在PHP中使用會議的主要目的是什麼?在PHP中使用會議的主要目的是什麼?Apr 22, 2025 pm 05:25 PM

在PHP中使用會話的主要目的是維護用戶在不同頁面之間的狀態。 1)會話通過session_start()函數啟動,創建唯一會話ID並存儲在用戶cookie中。 2)會話數據保存在服務器上,允許在不同請求間傳遞數據,如登錄狀態和購物車內容。

您如何在子域中分享會議?您如何在子域中分享會議?Apr 22, 2025 pm 05:21 PM

如何在子域名間共享會話?通過設置通用域名的會話cookie實現。 1.在服務器端設置會話cookie的域為.example.com。 2.選擇合適的會話存儲方式,如內存、數據庫或分佈式緩存。 3.通過cookie傳遞會話ID,服務器根據ID檢索和更新會話數據。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版