WordPress教程 – 什么是Hook鉤子?

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

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

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

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

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

    動作鉤子

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

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

    提交代碼后,查看前臺的網頁源代碼,就可以在 head 標簽里看到剛剛添加的內容了。

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

    // 發生404 向管理員郵箱發送郵件
    function HN_404_page_mail(){
      if( !is_404() ) return;//如果正常訪問頁面則退出該函數
      $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', 'HN_404_page_mail' );

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

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

    過濾器鉤子

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

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

    //文章內容圖片自動加ALT屬性為文章標題
    function kratos_auto_post_link($content)//$content 變量就是文章內容,因為其它過濾器也要過濾,所以這個內容可能是經過其它函數過濾的
     {
      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;//必須要把過濾后的內容返回回去,否則值就丟了
      }
    add_filter ('the_content', 'kratos_auto_post_link',0);

    其他

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

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

    你的 add_action 調用將是這樣:

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

    而且你的函數將是這樣:

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

    鉤子原理

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

    當調用 do_action() 的時候,會查找 $wp_filter 全局變量中都有哪些添加到此動作的函數,循環執行即可。

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

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

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

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

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

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

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

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 无码人妻品一区二区三区精99| 久久精品午夜一区二区福利| 在线播放精品一区二区啪视频| 蜜臀AV免费一区二区三区| 国产成人无码AV一区二区| 免费无码一区二区| 国产成人av一区二区三区在线观看| 无码中文字幕一区二区三区| 亚洲欧洲精品一区二区三区| 91一区二区视频| 中文字幕无码不卡一区二区三区 | 精品人妻码一区二区三区| 日韩欧国产精品一区综合无码| 国产综合精品一区二区三区| 亚洲第一区香蕉_国产a| 人妻体内射精一区二区三四| 国产成人久久精品区一区二区| 色窝窝免费一区二区三区| 夜夜高潮夜夜爽夜夜爱爱一区| 日韩精品久久一区二区三区| 日本一区二区三区精品国产 | 在线视频一区二区三区| 91在线视频一区| 精品欧美一区二区在线观看| 性盈盈影院免费视频观看在线一区| 国产精品一区二区香蕉| 国产成人精品无人区一区 | 国产在线视频一区二区三区98| 国产麻豆精品一区二区三区v视界 国产美女精品一区二区三区 | 一区免费在线观看| 日韩人妻无码一区二区三区综合部 | 无码精品人妻一区二区三区中| 久久精品黄AA片一区二区三区| 亚洲国产欧美一区二区三区| 美女视频免费看一区二区| 伊人激情AV一区二区三区| 亚洲AV成人一区二区三区在线看| 日韩在线一区二区三区视频| 国产av福利一区二区三巨| 久久久无码一区二区三区| 国产一区在线观看免费|