WordPress教程 - 什么是Hook鉤子?

    wordpress的插件就是通過各種各樣的Hook鉤子來實現(xiàn)的,wordpress提供了非常豐富的鉤子,你可以通過Hook鉤子給主題拓展出各種各樣有趣的功能來吸引您的主題用戶

    如果你作為一名wordpress主題的開發(fā)者還不知道啥事wordpress的Hook鉤子,那可就太落伍了,其實wordpress的插件就是通過各種各樣的Hook鉤子來實現(xiàn)的,wordpress提供了非常豐富的鉤子,你可以通過Hook鉤子給主題拓展出各種各樣有趣的功能來吸引您的主題用戶。

    不過,wordpress的Hook鉤子固然強大,但使用起來也是蠻復雜的,下面就來給大家介紹下吧。

    WordPress教程 - 什么是Hook鉤子?
    背景圖片

    WordPress 分為兩種鉤子,一個稱為動作(action),一個稱為過濾器(filter)。動作的理念是讓你在一種情況或者一個特別的位置執(zhí)行一些特定函數(shù),比如發(fā)送一封郵件等;過濾器則是允許你修改 WordPress 核心需要用到的一個值,然后 WordPress 再用這些值做一些事情,比如函數(shù)的返回值等。

    動作鉤子

    wp_head()函數(shù)就有一個很典型的 Hook 動作,大部分主題的 head 標簽中都加入此函數(shù)。其中的鉤子為:wp_head。插件和WordPress核心都通過給 wp_head 添加鉤子函數(shù)來向網(wǎng)站的 head 標簽中加入內(nèi)容。例:

    function my_wp_head() {
        echo '<meta name="keywords" content="WordPress" />';
    }
    add_action('wp_head', 'my_wp_head');

    提交代碼后,查看前臺的網(wǎng)頁源代碼,就可以在 head 標簽里看到剛剛添加的內(nèi)容了。

    這邊只是是演示一個最簡單的例子。利用這個鉤子,我們還可以做一個發(fā)生訪問 404 向管理員郵箱發(fā)送一封郵件的動作。

    // 發(fā)生404 向管理員郵箱發(fā)送郵件
    function HN_404_page_mail(){
      if( !is_404() ) return;//如果正常訪問頁面則退出該函數(shù)
      $to = get_option( 'admin_email' );//獲取管理員地址
      $subject = '遇到 404 頁面啦!';//郵件標題
      $message = '404 頁面的地址:http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];//郵件內(nèi)容
      wp_mail( $to, $subject, $message );//發(fā)送郵件
    }
    add_action( 'wp_head', 'HN_404_page_mail' );

    掛鉤函數(shù)可以選擇接受從動作調(diào)用的參數(shù),如果有任何要傳遞的話。在這個簡單的例子中,echo_comment_id 函數(shù)需要 $comment_id 參數(shù),該參數(shù)將在 comment_id_not_found 過濾鉤子運行時通過 do_action() 傳遞。

    function echo_comment_id( $comment_id ) // 注意$comment_id就是動作調(diào)用的參數(shù)傳遞過來的
    {
       echo 'Comment ID ' . $comment_id . ' could not be found';
    }
    add_action( 'comment_id_not_found', 'echo_comment_id', 10, 1 );

    過濾器鉤子

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

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

    //文章內(nèi)容圖片自動加ALT屬性為文章標題
    function kratos_auto_post_link($content)//$content 變量就是文章內(nèi)容,因為其它過濾器也要過濾,所以這個內(nèi)容可能是經(jīng)過其它函數(shù)過濾的
     {
      global $post;
      $content = preg_replace('/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i', "<img layer-src=\"$2\" src=\"$2\" alt=\"《".$post->post_title."》\" />", $content);
      return $content;//必須要把過濾后的內(nèi)容返回回去,否則值就丟了
      }
    add_filter ('the_content', 'kratos_auto_post_link',0);

    其他

    要找出一個動作的參數(shù)的ID和名稱,只需搜索匹配 do_action() 調(diào)用的代碼庫。舉例來說,如果你掛載到’save_post’,你會在 post.php 找到:

    <?php do_action( 'save_post', $post_ID, $post ); ?>

    你的 add_action 調(diào)用將是這樣:

    <?php add_action( 'save_post', 'my_save_post', 10, 2 ); ?>

    而且你的函數(shù)將是這樣:

    function my_save_post( $post_ID, $post )
    {
       // do stuff here
    }

    鉤子原理

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

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

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

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

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

    下面的代碼會打印出鉤子列表數(shù)組。

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

    以上就是這次wordpress開發(fā)的全部內(nèi)容了,光說不練假把式,來看看這個案例是咋通過wordpress的Hook鉤子來實現(xiàn)一個實用的功能的。

    WordPress教程 - 什么是Hook鉤子?-Npcink
    WordPress教程 - 什么是Hook鉤子?-Npcink

    wordpress美化 - 美觀的文章頁底部版權聲明

    國外主題

    Shoppo - 多功能WooCommerce商店WordPress主題

    2019-12-24 7:25:00

    插件

    Supsystic會員資格-會員插件

    2019-4-11 15:54:53

    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發(fā)送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優(yōu)惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 国产一区韩国女主播| 精品国产一区二区三区在线观看 | 久久精品国产一区| 亚洲国产精品成人一区| 国产成人av一区二区三区在线观看| 无码人妻精品一区二区三区99性 | 亚洲成在人天堂一区二区| 国产精品一区二区久久不卡| 一区二区三区免费高清视频| 日韩高清一区二区三区不卡| 亚洲乱码av中文一区二区 | 国产AV午夜精品一区二区三| 手机看片福利一区二区三区| 国产成人一区二区三区视频免费 | 在线精品亚洲一区二区小说| 久久久精品一区二区三区| 日韩精品无码一区二区三区 | 亚洲AV成人精品日韩一区| 国产一区二区三区小说| 国产精品亚洲一区二区三区久久 | 国产主播福利一区二区| 亚洲AV无码一区二区三区性色| 亚洲高清一区二区三区电影| 国产精品久久无码一区二区三区网| 春暖花开亚洲性无区一区二区 | 国产无码一区二区在线| 国产熟女一区二区三区四区五区| 国产成人精品一区二区三区免费 | 成人一区二区三区视频在线观看| 日韩AV无码一区二区三区不卡| 波多野结衣中文字幕一区二区三区| 亚洲国产精品一区二区九九| 国产综合一区二区| 亚洲色一区二区三区四区| 无码精品人妻一区二区三区影院| 中文字幕一精品亚洲无线一区| 国产福利91精品一区二区| 国产一区二区在线观看视频| 免费一区二区无码东京热| 亚洲制服丝袜一区二区三区| 国产福利一区视频|