2010-06-24 142 views
7

我試圖在其他插件可以使用的一個WordPress插件中創建鉤子。首先,這甚至有可能嗎?我還發送了一些額外的參數,所以這可能是2個問題之一,因爲我一直無法找到關於如何做到這一點的確切信息。WordPress插件中的自定義鉤子

這是我到目前爲止已經試過:

在考慮創建掛鉤插件(稱爲插件1)我說:

do_action('plugin1_hook', $customArg1, $customArg2, $customArg3); 

在我想要的掛鉤點開火。然後,在不同的插件(插件2),我說:

add_action('plugin1_hook', 'my_function'); 

function my_function($customArg1, $customArg2, $customArg3) { //my code } 

這似乎並沒有然而,要射擊的功能。 我給這家refence一直是WordPress的鉤comment_post,這是由WordPress的定義爲:

do_action('comment_post', $comment_ID, $commentdata['comment_approved']); 

和我使用的是:

add_action('comment_post', 'my_comment'); 
function my_comment($comment_id) { //my code } 

上面的代碼中正常工作。

回答

5

我想我會張貼此作爲一個答案,因爲它是一個更清晰一點解釋:)

當你勾功能,但不指定參數的數目,WordPress會一直傳回一個說法。

你不會因爲這樣的事情而得到錯誤;

function do_my_hook($arg1, $arg2 = '', $arg3 = '') {} 
add_action('my_hook', 'do_my_hook'); 

但是你會爲了這樣的事情;

function do_my_hook($arg1, $arg2, $arg3) {} 
add_action('my_hook', 'do_my_hook'); 

WordPress正試圖呼叫do_my_hook(),但它只傳回一個參數。第一個示例使用PHP default function arguments,以便可以在不傳遞所有可用參數的情況下調用函數,但不會出錯。

第二個示例將觸發'missing arguments(s)'PHP錯誤,因爲所有三個參數都是必需的。

修復?

add_action('my_hook', 'do_my_hook', 10, 3); 

後面定義你的函數有多少參數需要我們的想法是,以避免類似這些錯誤的(雖然在技術上它們一樣容易使用默認參數避免!)。

0

我的猜測是第二個插件是在第一個插件之後加載的,所以當你添加一個動作的時候鉤子已經被觸發了。你可以嘗試這個第一個插件:

function my_custom_hook_insertion($arg1, $arg2, $arg3){ 
    do_action('plugin1_hook', $arg1, $arg2, $arg3); 
} 
add_action('plugins_loaded', 'my_custom_hook_insertion'); 

這將等到所有插件加載之前發射鉤。

+0

我在做什麼是使用評論投票插件和掛鉤不會觸發,直到有人對評論投票。我仍然想知道順序是否可能會影響事情 - 雖然我猜add_action可以在任何時候調用,但只要do_action事件發生後就會工作。 – 2010-06-24 17:03:04

+1

這幾乎是瑞恩:)約翰的解決方案應該工作,因爲它會等待所有插件在啓動'do_action'之前加載。 – TheDeadMedic 2010-06-25 16:20:30

0

更改我的ADD_ACTION這個固定的問題:

add_action('plugin1_hook', 'my_function', 10, 3); 

的10個代表的優先級,3表示該功能將args來數。我並不完全確定匹配是如何工作的,因爲默認值是1,並且我使用了大量的鉤子而沒有指定0個參數,並且我使用了鉤子來傳遞多於1個參數,但是在我的函數簽名中只使用了1個參數。來源:WordPress Codex: Function Reference/add action

它雖然工作,所以交叉插件鉤子是可能的。

相關問題