2010-06-24 15 views
7

Estoy tratando de crear un gancho en un plugin de Wordpress que pueda ser utilizado por otros complementos. En primer lugar, ¿esto es posible? También estoy enviando algunos argumentos adicionales, por lo que pueden ser 2 preguntas en una, ya que he tenido problemas para encontrar información definitiva sobre cómo hacerlo.Ganchos personalizados en WordPress a través de complementos

Esto es lo que he probado hasta ahora:

En el plugin que está creando el gancho (lo llaman Plugin 1) añadí:

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

en el punto que quiero el gancho para disparar. Luego, en un plugin diferente (Plugin 2), añadí:

add_action('plugin1_hook', 'my_function'); 

y

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

Esto no parece ser la función de disparar, sin embargo. Mi refence para este ha sido el gancho comment_post Wordpress, que se define por Wordpress como:

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

y estoy usando como:

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

El fragmento anterior está funcionando correctamente.

Respuesta

5

Yo pensé que había puesto esto como una respuesta ya que es un poco más claro para explicar :)

Con la conexión de una función, pero no se especifica el número de argumentos, WordPress siempre va a pasar de nuevo un argumento.

No obtendrá errores por algo como esto;

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

Pero lo hará por algo como esto;

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

WordPress está intentando llamar do_my_hook(), pero sólo está pasando de vuelta un argumento. El primer ejemplo usa PHP default function arguments, para que pueda llamar a una función sin pasar todos los argumentos disponibles, pero sin error.

El segundo ejemplo desencadenará un error PHP de "faltantes de argumento (s)", ya que se requieren los tres argumentos.

¿La solución?

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

La idea detrás de la definición de la cantidad de argumentos que su función toma es para evitar errores como estos (aunque técnicamente se evitan fácilmente utilizando los argumentos por defecto!).

0

Supongo que el segundo complemento se está cargando después del primero, por lo que el enganche ya se activó cuando le agregaste una acción. Usted puede tratar esto para el primer plugin:

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

Eso va a esperar hasta que todos los plugins se cargan antes de disparar el gancho.

+0

Lo que estoy haciendo es usar un complemento de votación para comentarios y el gancho no se activa hasta que alguien vota un comentario. Todavía me pregunto si el orden podría estar afectando las cosas, supongo que se puede llamar a add_action en cualquier momento y funcionará siempre que do_action se active después. –

+1

Eso es más o menos Ryan :) La solución de John debería funcionar, ya que espera a que todos los complementos se hayan cargado antes de disparar el 'do_action'. – TheDeadMedic

0

Cambiar mi add_action a esta solucionado el problema:

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

El 10 representa la prioridad, y la figura 3 representa el número de argumentos que tendrá la función. No estoy exactamente seguro de cómo funciona la coincidencia, ya que el valor predeterminado es 1, y uso muchos ganchos sin especificar 0 argumentos y he usado ganchos que pasan más de 1 arg pero solo uso 1 arg en la firma de mi función. Fuente: WordPress Codex: Function Reference/add action

Sin embargo, está funcionando, por lo que es posible utilizar ganchos cruzados.

Cuestiones relacionadas