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教程 - 什么是Hook鉤子?-Npcink
    WordPress教程 - 什么是Hook鉤子?-Npcink

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

    阿里云開發者成長計劃區塊 - WordPress區塊

    2020-12-15 1:15:00

    教程

    什么是Pingback? - WordPress教程

    2020-9-2 8:30:34

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 狠狠色婷婷久久一区二区三区| 国产一区在线视频| 无码视频一区二区三区在线观看 | 日韩久久精品一区二区三区| 国产剧情一区二区| 精品国产AV一区二区三区| 免费视频精品一区二区三区| 国产亚洲综合一区二区三区| 亚洲AV无码国产精品永久一区| 无码人妻精品一区二区三| 国产成人高清视频一区二区 | 日韩一区二区三区视频| 国产精品视频一区二区三区| 无码av免费一区二区三区| 日韩电影在线观看第一区| 国产精品亚洲一区二区三区在线观看| 一区二区三区在线免费看| 精品久久一区二区| 日本一区二区不卡视频| 日本道免费精品一区二区| 日本一道一区二区免费看| 性色av闺蜜一区二区三区| 韩国精品一区视频在线播放| 毛片无码一区二区三区a片视频| 亚洲色偷精品一区二区三区| 无码国产精品一区二区免费I6| 2018高清国产一区二区三区| 国产精品亚洲高清一区二区| 精品无码综合一区二区三区| 色一情一乱一伦一区二区三区 | 日本中文字幕一区二区有码在线| 国产aⅴ一区二区| 国产成人一区二区三区免费视频| 风间由美在线亚洲一区| 一区二区三区AV高清免费波多| 亚洲国产一区二区视频网站| 国产av成人一区二区三区| 亚洲av不卡一区二区三区| 精品国产一区二区三区麻豆| 无码精品不卡一区二区三区| 一区视频在线播放|