最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析WordPress中函數(shù)鉤子hook的作用及基本用法

 更新時(shí)間:2015年12月22日 15:48:34   作者:斌果  
這篇文章主要介紹了解析WordPress中函數(shù)鉤子hook的作用及基本用法,hook是WordPress中調(diào)用函數(shù)的重要用法,也是插件開(kāi)發(fā)的基礎(chǔ),需要的朋友可以參考下

WordPress 的插件機(jī)制實(shí)際上只的就是這個(gè) Hook 了,它中文被翻譯成鉤子,允許你參與 WordPress 核心的運(yùn)行,是一個(gè)非常棒的東西,下面我們來(lái)詳細(xì)了解一下它。
鉤子分類(lèi)

鉤子分為兩種,一種叫做動(dòng)作(action),還有一種叫做過(guò)濾器(filter)。這兩種鉤子實(shí)現(xiàn)原理基本一樣,后邊會(huì)講到,使用上的區(qū)別在于過(guò)濾器有返回值,而動(dòng)作沒(méi)有。

動(dòng)作的理念是讓你在一種情況或者一個(gè)特別的位置執(zhí)行一些函數(shù),比如發(fā)送一封郵件等;過(guò)濾器則是讓你修改 WordPress 核心需要用到的一個(gè)值,然后 WordPress 再用這些值做一些事情,比如函數(shù)的返回值等。

動(dòng)作鉤子

wp_head 是一個(gè)很常用的動(dòng)作鉤子,在開(kāi)發(fā)主題過(guò)程中,開(kāi)發(fā)者都會(huì)在 head 標(biāo)簽里加上 wp_head() 函數(shù),事實(shí)上,正是這個(gè)函數(shù)調(diào)用了 wp_head 鉤子。

如果插件開(kāi)發(fā)者想要在 head 標(biāo)簽里添加一句話,就可以使用 wp_head 鉤子,下邊是個(gè)簡(jiǎn)單的例子。

//在 head 標(biāo)簽添加一些內(nèi)容
function Bing_add_head_tag(){
  echo '添加內(nèi)容';
}
add_action( 'wp_head', 'Bing_add_head_tag' );

添加代碼后,查看前臺(tái)的網(wǎng)頁(yè)源代碼,就能在 head 標(biāo)簽里看到我們添加的內(nèi)容了。

20151222154540066.png (437×83)

上邊是一個(gè)簡(jiǎn)單的例子,只是打印了一句話。利用這個(gè)鉤子,我們還可以做一個(gè)遇到 404 頁(yè)面給管理員發(fā)送一封郵件的插件,下邊簡(jiǎn)單的寫(xiě)了一個(gè)。

//遇到 404 頁(yè)面給管理員發(fā)送郵件
function Bing_404_page_mail(){
  if( !is_404() ) return;//如果不是 404 頁(yè)面就退出函數(shù)
  $to = get_option( 'admin_email' );//獲取管理員地址
  $subject = '遇到 404 頁(yè)面啦!';//郵件標(biāo)題
  $message = '404 頁(yè)面的地址:http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];//郵件內(nèi)容
  wp_mail( $to, $subject, $message );//發(fā)送郵件
}
add_action( 'wp_head', 'Bing_404_page_mail' );

過(guò)濾器鉤子

根據(jù)我的親身經(jīng)歷,可能過(guò)濾器鉤子會(huì)難理解些,尤其對(duì)不熟悉 PHP 的人來(lái)說(shuō)。

過(guò)濾器鉤子可以讓你改一些東西的值,過(guò)濾器回調(diào)函數(shù)會(huì)接受一個(gè)參數(shù),這就是當(dāng)前的值。還記得那個(gè)用來(lái)調(diào)用文章內(nèi)容的 the_content() 函數(shù)吧,這個(gè)函數(shù)就提供了一個(gè) the_content 過(guò)濾器。

給 the_content 鉤子添加一個(gè)函數(shù),這個(gè)函數(shù)需要接收一個(gè)參數(shù),這個(gè)參數(shù)就是當(dāng)前的值。

//文章內(nèi)容全部鏈接新窗口打開(kāi)
function Bing_autoblank( $content ){//$content 變量就是文章內(nèi)容,因?yàn)槠渌^(guò)濾器也要過(guò)濾,所以這個(gè)內(nèi)容可能是經(jīng)過(guò)其它函數(shù)過(guò)濾的
  $content = str_replace( '<a', '<a target="_blank"', $content );//添加 target="_blank"
  return $content;//必須要把過(guò)濾后的內(nèi)容返回回去,否則值就丟了
}
add_filter( 'the_content', 'Bing_autoblank' );

鉤子原理

事實(shí)上,在調(diào)用 add_action() 和 add_filter() 的時(shí)候,只是向 $wp_filter 全局變量添加了一個(gè)數(shù)組元素,還要說(shuō)的就是動(dòng)作和過(guò)濾器是公用的一個(gè)全局變量,也就是說(shuō),過(guò)濾器和動(dòng)作是不能重名的。

當(dāng)調(diào)用 do_action() 的時(shí)候,會(huì)查找 $wp_filter 全局變量中都有哪些添加到此動(dòng)作的函數(shù),循環(huán)執(zhí)行即可。

apply_filters() 比 do_action() 多了一個(gè)步奏,就是每次調(diào)用函數(shù)時(shí)還要接收這個(gè)函數(shù)的返回值,最后把經(jīng)過(guò)多次過(guò)濾的值返回出去,供使用。

獲取當(dāng)前鉤子列表
WordPress 的動(dòng)作和過(guò)濾器是插件機(jī)制的核心部分,允許你在特定的地方主動(dòng)添加自己需要執(zhí)行的動(dòng)作,一般使用 add_action() 和 add_filter() 函數(shù)掛載函數(shù)。

這些鉤子被儲(chǔ)存在 $wp_filter 全局變量里,所以,要獲取鉤子列表,可以直接獲取 $wp_filter 全局變量。

<pre><?php var_dump( $GLOBALS['wp_filter'] ); ?></pre>

上邊的代碼會(huì)打印出鉤子列表。

20151222154645343.png (388×432)

相關(guān)文章

  • php頁(yè)面消耗內(nèi)存過(guò)大的處理辦法

    php頁(yè)面消耗內(nèi)存過(guò)大的處理辦法

    是因?yàn)閜hp頁(yè)面消耗的最大內(nèi)存默認(rèn)是為 8M (在PHP的ini件里可以看到) ,如果文件太大 或圖片太大 在讀取的時(shí)候 會(huì)發(fā)生錯(cuò)誤。
    2013-03-03
  • php實(shí)現(xiàn)登錄頁(yè)面的簡(jiǎn)單實(shí)例

    php實(shí)現(xiàn)登錄頁(yè)面的簡(jiǎn)單實(shí)例

    在本篇文章里小編給大家分享的是關(guān)于php實(shí)現(xiàn)登錄頁(yè)面的簡(jiǎn)單實(shí)例以及相關(guān)知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。
    2019-09-09
  • PHP中“簡(jiǎn)單工廠模式”實(shí)例代碼講解

    PHP中“簡(jiǎn)單工廠模式”實(shí)例代碼講解

    PHP中簡(jiǎn)單工廠模式實(shí)例代碼,學(xué)習(xí)php類(lèi)的朋友可以參考下
    2012-09-09
  • PHPCMS的使用小結(jié)

    PHPCMS的使用小結(jié)

    前段時(shí)間仔細(xì)看了一下PHPCMS這套開(kāi)源的系統(tǒng),實(shí)現(xiàn)了程序與模板分離,覺(jué)得寫(xiě)得真的不錯(cuò)。本人很少關(guān)注開(kāi)源系統(tǒng),尤其是PHP的,覺(jué)得PHP本身就是一個(gè)寵大的函數(shù)庫(kù),不過(guò)幾千個(gè)系統(tǒng)函數(shù)確實(shí)解決了不少問(wèn)題。
    2010-09-09
  • php json_encode奇怪問(wèn)題說(shuō)明

    php json_encode奇怪問(wèn)題說(shuō)明

    php json_encode奇怪問(wèn)題說(shuō)明,使用json_encode的朋友可以參考下。
    2011-09-09
  • MYSQL環(huán)境變量設(shè)置方法

    MYSQL環(huán)境變量設(shè)置方法

    本文介紹了mysql數(shù)據(jù)庫(kù)中環(huán)境變量的設(shè)置方法,如何設(shè)置mysql數(shù)據(jù)庫(kù)的環(huán)境變量,有需要的朋友參考下
    2007-01-01
  • php設(shè)計(jì)模式之單例模式實(shí)例分析

    php設(shè)計(jì)模式之單例模式實(shí)例分析

    這篇文章主要介紹了php設(shè)計(jì)模式之單例模式,實(shí)例分析了單例模式的原理與相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • PHP頁(yè)面中文亂碼分析

    PHP頁(yè)面中文亂碼分析

    php出現(xiàn)出現(xiàn)亂碼的原因:頁(yè)面文件的編碼方式(.html,.php等)、html.head中指定瀏覽器的編碼方式、MySql數(shù)據(jù)庫(kù)傳輸?shù)木幋a方式、Apache字符集。
    2013-10-10
  • PHP與C#分別格式化文件大小的代碼

    PHP與C#分別格式化文件大小的代碼

    發(fā)現(xiàn)了一個(gè)格式化文件大小的方法, 很帥, 很簡(jiǎn)潔, 尤其是 PHP 版的, 只需要 2 行代碼
    2011-05-05
  • php 遠(yuǎn)程包含文件漏洞分析

    php 遠(yuǎn)程包含文件漏洞分析

    首先,我們來(lái)討論包含文件漏洞,首先要問(wèn)的是,什么才是"遠(yuǎn)程文件包含漏洞"?回答是:服務(wù)器通過(guò)php的特性(函數(shù))去包含任意文件時(shí),由于要包含的這個(gè)文件來(lái)源過(guò)濾不嚴(yán),從而可去包含一個(gè)惡意文件,而我們可以構(gòu)造這個(gè)惡意文件來(lái)達(dá)到邪惡的目的。
    2009-10-10

最新評(píng)論

布尔津县| 白玉县| 漠河县| 澎湖县| 凭祥市| 阳山县| 遂昌县| 凭祥市| 寿阳县| 中牟县| 镇江市| 曲沃县| 城固县| 温州市| 彭阳县| 泌阳县| 安康市| 苏州市| 合江县| 江阴市| 夹江县| 图木舒克市| 扎兰屯市| 额济纳旗| 仙游县| 保康县| 穆棱市| 庄浪县| 乌兰察布市| 商都县| 阜阳市| 望江县| 永和县| 义乌市| 宿松县| 宜兰县| 阿拉善左旗| 峨边| 油尖旺区| 信阳市| 翁源县|