Hook

Hook是WordPress提供的,允許你的插件“勾入”WordPress的程序,或者說,可以在特定時候執行你插件中的函數,從而使得你的插件執行。這裏提供了兩種hook:

  1. Action:Action(動作)是WordPress程序核心在程序執行的特殊點(特定事件發生)加載的。使用Action API,你的插件可以在這些特殊點執行一個或者多個在插件中編寫的PHP函數。
  2. Filter:Filter(過濾器)是WordPress加載的,當文本被存入數據庫或發送到瀏覽器之前,Filter可用來對其進行多種類型的處理。使用Filter,你的插件可以使用定義在其中的PHP函數來對文本進行多種處理。
  3. 編寫Action函數

    在插件中創建Action的第一步是在插件中編寫一個實現Action功能的PHP函數並且將其放入你的插件文件(插件文件必須放置在wp-content/plugins目錄)中。比如,如果你希望當發表一篇日誌後,發送Email通知給你的朋友,那麼你可以定義如下函數:

    function email_friends($post_ID)  {
        $friends = '[email protected],[email protected]';
        mail($friends, "sally's blog updated", 
          'I just put something on my blog: http://blog.example.com');
        return $post_ID;
    }

    在大多數Action中,你的函數應該接受一個參數(通常是日誌或者帖子的編號,這取決於你要進行的操作)。某些Action可能有多餘一個參數--你可以通過查看Action的文檔或者WordPress源代碼來獲得更多信息。除函數參數外,你還可以訪問WordPress的全局變量以及執行WordPress中定義的其他函數(或者在你的插件文件中定義的函數)。

    注意:切記其他插件或者WordPress核心可能已經使用了你希望使用的函數名稱,你可以瀏覽Avoiding Function Name Collisions(避免函數名稱衝突--譯者注)來獲得更多信息。

    Hook(勾入)到WordPress

    完成你的函數的編寫後,下一步就是將其hook(勾入)或者說註冊到WordPress中,你可以通過執行全局空間中的add_action()函數來實現,如:

    add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );

    此處

    • hook_name參數是WordPress提供的Action Hook(動作鉤子)名稱,這決定了你的函數應當和哪個事件結合。
    • your_function_name參數是你希望在特定事件(即hook_name參數指定的事件)後執行的函數名稱。該函數可以是標準的PHP函數,在WordPress核心中定義的函數或者你自己在插件文件中定義的函數(如剛纔我們編寫的emai_friends函數)。
    • priority參數是一個可選的整型參數,他用來指明在結合特定事件的多個函數中,當前函數被執行的順序(默認爲10)。該參數指定的更小的數字會被更早的執行,priority參數相同的函數會依照他們被加入Action的順序來執行。
    • accepted_args參數是一個可選的整型參數,他定義了你的函數中可以接收多少個參數(默認爲1)。該參數是非常有用的,因爲某些Hook可以向你的函數中傳入多個參數。該參數在1.5.1版本中被新加入。

    在前面的例子中,我們可以在插件文件中加入如下代碼:

    add_action('publish_post', 'email_friends');

    同樣的,你也可以在Action Hook中移除Action,你可以參考Remove Actions來獲得更多詳情。

    Filters(過濾器)

    Filters(過濾器)是WordPress在執行中的特定點傳遞數據的函數,他發生在對數據進行操作(如將其加入數據庫或發送到瀏覽器)之前。Filter建立在數據庫到瀏覽器之間的處理(當WordPress生成頁面時),同時也建立在瀏覽器到數據庫之間的處理(當WordPress新增日誌或者評論到數據庫時);多數WordPress中的輸入輸出都通過了至少一個filter。WordPress默認已經實現了一些過濾操作,你的插件也可以加入你自己的過濾操作。

    將你的filter加入WordPress中的基本步驟如下:

    1. 編寫用於過濾數據的PHP函數。
    2. 通過執行add_filter函數將filter Hook(勾入)到WordPress。
    3. 將你的PHP函數放入插件文件,並且將其激活。

    編寫Filter(過濾器)函數

    Filter(過濾器)函數獲得未經修改的數據,並返回修改後的數據(或者在某些情況下,返回null值來標識數據應當被刪除或忽略)。如果你的filter不修改數據,那麼應當返回原始數據,這樣,如果必要,其餘的插件可以繼續修改數據。

    因此,在你的插件中創建filter的第一步是編寫一個PHP函數來進行過濾處理,並且將其放在你的插件文件(插件文件必須放置在wp-content/plugins目錄)當中。例如,如果你希望確保你的帖子和評論中不包含髒話,你可以定義一個存放禁止詞彙的全局變量,然後編寫如下的PHP函數:

    function filter_profanity($content) {
        global $profanities;
        foreach($profanities as $profanity) {
            $content=str_ireplace($profanity,'{censored}',$content);
        }
        return $content;
    }

    注意:切記其他插件或者WordPress核心可能已經使用了你希望使用的函數名稱,你可以瀏覽Avoiding Function Name Collisions(避免函數名稱衝突--譯者注)來獲得更多信息。

    Hook(勾入)到WordPress

    完成你的函數的編寫後,下一步就是將其hook(勾入)或者說註冊到WordPress中,你可以通過執行全局空間中的add_filter()函數來實現,如:

    add_filter('hook_name', 'your_filter', [priority], [accepted_args]);

    此處:

    • hook_name參數是WordPress提供的Filter Hook(過濾器鉤子)名稱,這決定了你的函數在何時發揮作用。
    • your_filter參數是你希望用來過濾的函數的名稱。該函數可以是標準的PHP函數,在WordPress核心中定義的函數或者你自己在插件文件中定義的函數。
    • priority參數是一個可選的整型參數,他用來指明在結合特定事件的多個函數中,當前函數被執行的順序(默認爲10)。該參數指定的更小的數字會被更早的執行,priority參數相同的函數會依照他們被加入Action的順序來執行。
    • accepted_args參數是一個可選的整型參數,他定義了你的函數中可以接收多少個參數(默認爲1)。該參數是非常有用的,因爲某些Hook可以向你的函數中傳入多個參數。該參數在1.5.1版本中被新加入。
    • 刪除Action和Filter

      在某些情況下,你會發現你希望你的插件屏蔽WordPress內建或者其他插件加入的Action或Filter。你可以通過執行remove_filter('filter_hook','filter_function')函數或者remove_action('action_hook','action_function')函數來實現。

      舉例來說,remove_action('publish_post','generic_ping');會使得你在發表新日誌時不發送日誌引用(ping)。

      注意如果某個hook在註冊時使用了除默認值10意外的priority參數,則你必須修改在remove_action()函數中的priority參數。同時也請注意,通常來講除非你知道這樣做的原因和後果,你不應當移除任何東西--請檢查WordPress或者其他插件的源代碼來保證這一點。

      默認應用的Filter和Action

      找出WordPress默認啓用的filter和Action的最可靠方法是在WordPress核心文件中搜索 add_filter和add_action。

      WordPress 2.1

      在WordPress 2.1中,大多數默認filter和action是通過文件wp-includes/default-filters.php來加入的,少數其他的在如下文件中被加入:

      • wp-admin/admin-ajax.php
      • wp-admin/admin-functions.php
      • wp-admin/custom-header.php
      • wp-admin/edit.php
      • wp-admin/index.php
      • wp-admin/options-permalink.php
      • wp-admin/upload-functions.php
      • wp-admin/upload.php
      • wp-includes/bookmark.php
      • wp-includes/general-template.php
      • wp-includes/kses.php
      • wp-includes/plugin.php
      • wp-includes/rewrite.php
      • wp-includes/template-loader.php
      • wp-includes/theme.php


    http://www.ashuwp.com/courses/level/simple

  4. http://blog.wpjam.com/2007/11/09/write-plugin-by-yourself-begin/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章