介紹50個 WordPress 動做掛鉤

WordPress 之因此能成爲世界上最受歡迎的網頁內容管理系統,緣由就在於它的高度靈活性和可塑性,而這種靈活性和可塑性正是由「掛鉤」(Hooks)簡潔宜用的結構所決定的。能夠說,沒有過濾掛鉤(Filter Hooks)和動做掛鉤(Action Hooks), WordPress 就不會具備這樣高的可拓展性,咱們也不可能會有如此多的 WordPress 插件和主題可供選擇。php

在本系列教程中,我將會向你詳細介紹 WordPress 中的動做掛鉤。在整個教程中,咱們將會涵蓋有關動做掛鉤幾乎全部方面的內容。web

  • 在第一部分,也就是在本文中,咱們將會逐步瞭解到 WordPress 動做掛鉤:什麼是 WordPress 動做掛鉤,以及怎樣使用 WordPress 的7大核心動做掛鉤。
  • 在接下來的五個部分,咱們將會接觸到大量有關 WordPress 動做掛鉤的實例。而在每個部分,咱們都會了解到10個掛鉤的優勢和它們的使用條件,並經過一些實例來進一步掌握它們。
  • 在本系列課程的最後,咱們將會進行一次課程回顧與總結,包括所舉的50個例子。

這個學習過程將會很是漫長,因此,請作好準備。數組

什麼是 WordPress 動做掛鉤

在 Codex ( WordPress 法典)中,給出的定義以下:sass

動做掛鉤由 WordPress 中的特定事件激活,例如:發佈一篇文章、更改主題,或者是顯示管理控制界面( administration screen)。動做掛鉤是在插件(或主題)中定義的自定義PHP函數,即被設定爲迴應某些特定事件。less

因此,從本質上來講,動做掛鉤由某個 WordPress 事件激活,能夠在事件以前或以後運行。動做掛鉤只是WordPress的兩種掛鉤之一,另外一個則是咱們以前講到的過濾掛鉤(Filters)——若是想了解更多有關 WordPress 過濾掛鉤的內容,請參閱《50個 WordPress 過濾掛鉤》一文。wordpress

在WordPress中使用動做掛鉤

定義動做掛鉤只是最簡單的一步,幸運的是,學會如何建立和使用動做掛鉤也是很是簡單的。首先,讓咱們來看看怎樣將相關函數掛載到動做掛鉤上,怎樣建立新的動做掛鉤,清除現有的掛鉤和其餘在 WordPress core中與動做掛鉤相關的函數。函數

將一個函數掛載到一個動做掛鉤上

其中最簡單的函數也許就是 add_action():它能夠將某個函數掛載到咱們即將使用的動做掛鉤上post

  1. <?php
  2.  
  3. add_action( $hook_name, $function_name, $priority, $arguments );
  4.  
  5. ?>

讓咱們來看看這些參數意味着什麼:學習

  • $hook_name 是所使用的動做掛鉤的名稱。
  • $function_name 是函數名。
  • $priority 是咱們規定的一個整數,用來設置函數在此掛鉤中的優先級別。
  • $arguments 是函數所使用的和動做掛鉤同時所容許的參數個數。

讓咱們來看一個簡單的例子:spa

  1. <?php
  2.  
  3. add_action( 'add_meta_boxes', 'my_function', 10, 2 );
  4.  
  5. function my_function( $post_type, $post ) {
  6.     // do stuff with $post_type and $post
  7. }
  8.  
  9. ?>

很簡單,對吧?

從動做掛鉤中清除原有函數

咱們可使用如下兩個函數清除動做掛鉤中的原有函數: remove_action() 和 remove_all_actions()

首先來看一看它們是如何使用的:

  1. <?php
  2.  
  3. // remove_action( $hook_name, $function_name, $priority );
  4. remove_action( 'login_enqueue_scripts', 'some_function', 10 );
  5.  
  6. // remove_all_actions( $hook_name, $priority );
  7. remove_all_actions( 'wp_enqueue_scripts', 10 );
  8.  
  9. ?>

remove_action() 有三個參數:掛鉤名稱、要清除的函數名和使用 add_action() 時設置的優先級別。 remove_all_actions() 函數則沒有$function_name 參數,由於它會清除動做掛鉤中的全部函數。

建立一個動做掛鉤

若是你想要開發 WordPress插件或者主題的話,一個值得推薦的作法是在你的代碼中建立一些掛鉤,這樣其餘的開發人員就能夠繼續擴展你的插件和主題了。而要作到這一點,咱們須要兩個函數:do_action() 和 do_action_ref_array()。讓咱們來看看第一個函數是如何運做的:

  1. <?php
  2.  
  3. do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );
  4.  
  5. /*
  6.  * Usage:
  7.  * 
  8.  * add_action( hook_name, my_function )
  9.  * 
  10.  * function my_function( $arg1, $arg2 ) {
  11.  *     // do stuff with $arg1, $arg2 and so on
  12.  * }
  13.  * 
  14.  */
  15.  
  16. ?>

正如你所看到的那樣,這個函數實際上能夠包含無限多的參數,你能夠根據須要來定義任意多的參數。若是你想在一個數組中保存這些參數,那麼你還須要使用第二個函數:

  1. <?php
  2.  
  3. $args = array( $arg1, $arg2, /* ... */ $argN );
  4.  
  5. do_action_ref_array( $hook_name, $args );
  6.  
  7. /*
  8.  * Usage:
  9.  * 
  10.  * add_action( hook_name, my_function )
  11.  * 
  12.  * function my_function( $args ) {
  13.  *     // do stuff with $args[0], $args[1] and so on
  14.  * }
  15.  * 
  16.  */
  17.  
  18. ?>

檢索動做掛鉤被調用的次數

若是你想知道一個動做掛鉤被調用的次數,你可使用一個簡單方便的函數來統計:

  1. <?php
  2.  
  3. function tuts_foo() {
  4.     $action_count = did_action( 'some_action_name' );
  5.     if ( 1 === $action_count ) {
  6.         // run code if 'some_action_name' has been fired only once
  7.     }
  8. }
  9.  
  10. ?>

正如你看到的那樣,這個函數中惟一的參數就是動做掛鉤的命名。

檢查是否存在指定的動做掛鉤

假設你正在爲一個流行的 WordPress 插件開發其餘的擴展插件,你首先須要檢查用戶是否已經安裝了這個 WordPress 插件。(畢竟,若是這個插件沒有安裝並激活的話,那麼你後來開發的插件也將沒法使用。)

爲了進行這項檢查,你可使用 has_action() 函數以肯定這個插件的動做掛鉤是能夠訪問的:

  1. <?php
  2.  
  3. if( has_action( 'some_popular_plugin_action' ) {
  4.     add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' );
  5. } else {
  6.     wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' );
  7.     // CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it.
  8. }
  9.  
  10. ?>

就像 did_action() 函數,has_action() 函數只有一個參數:動做掛鉤的名稱。

 

 

相關文章
相關標籤/搜索