2010-06-24 16 views
7

Sto provando a creare un hook in un plugin Wordpress che potrebbe essere utilizzato da altri plugin. Prima di tutto, è possibile? Sto anche inviando alcuni argomenti aggiuntivi in ​​modo che questo potrebbe essere 2 domande in uno poiché ho avuto difficoltà a trovare informazioni definitive su come farlo.Ganci personalizzati in WordPress attraverso i plugin

Ecco quello che ho provato finora:

nel plugin che sta creando il gancio (lo chiamano Plugin 1) ho aggiunto:

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

al punto che voglio il gancio sparare Poi, in un plugin diverso (Plugin 2), ho aggiunto:

add_action('plugin1_hook', 'my_function'); 

e

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

Questo non sembra essere la funzione di cottura, tuttavia. mio refence per questo è stato il gancio comment_post Wordpress, che è definita da Wordpress come:

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

e sto usando come:

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

È possibile che questo frammento funziona correttamente.

risposta

5

ho pensato di questo post come una risposta in quanto è un po 'più chiaro per spiegare :)

quando si collega una funzione, ma non si specifica il numero di argomenti, WordPress sarà sempre passare di nuovo un argomento.

Non si otterranno errori per qualcosa di simile;

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

Ma per qualcosa del genere;

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

WordPress sta tentando di chiamare do_my_hook(), ma è solo di passaggio indietro di un argomento. Il primo esempio utilizza PHP default function arguments, in modo che sia possibile chiamare una funzione senza passare tutti gli argomenti disponibili, ma senza errori.

Il secondo esempio attiverà un errore PHP 'missing argument (s)', in quanto sono richiesti tutti e tre gli argomenti.

La correzione?

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

L'idea alla base che definisce quanti argomenti la funzione prende è quello di evitare errori come questi (anche se tecnicamente sono facilmente evitati usando argomenti di default!).

0

La mia ipotesi è che il secondo plug-in si carichi dopo il primo, quindi il gancio è già stato attivato quando si aggiunge un'azione. Puoi provare questo per il primo plug-in:

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

Che attenderà che tutti i plug-in vengano caricati prima di attivare il gancio.

+0

Quello che sto facendo è usare un plug-in per la votazione dei commenti e l'hook non si attiva finché qualcuno non vota su un commento. Mi sto ancora chiedendo se l'ordine potrebbe influenzare le cose però - immagino che add_action possa essere chiamato in qualsiasi momento e funzionerà fintanto che gli spari di do_action in seguito. –

+1

Questo è praticamente Ryan :) La soluzione di John dovrebbe funzionare a meraviglia, dal momento che aspetta che tutti i plugin siano caricati prima di lanciare il comando 'do_action'. – TheDeadMedic

0

Cambiare mia add_action a questo risolto il problema:

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

Il 10 rappresenta la priorità, e il 3 rappresenta il numero di argomenti che la funzione prenderà. Non sono esattamente sicuro di come funzioni la corrispondenza, dal momento che il valore predefinito è 1, e uso un sacco di hook senza specificare 0 arg e ho usato ganci che superano più di 1 arg ma usato solo 1 arg nella firma della mia funzione. Fonte: WordPress Codex: Function Reference/add action

Tuttavia, funziona, quindi sono possibili hook cross-plug.

Problemi correlati