Buscar..


Sintaxis

  • add_action (etiqueta, function_to_call, prioridad, num_of_args);
  • add_filter (etiqueta, function_to_call, prioridad, num_of_args);

Parámetros

Parámetro Explicación
$ etiqueta (cadena) (Requerido) El nombre de la acción a la que se engancha la función $.
$ función (callable) (Requerido) Requiere una cadena que contenga el nombre de la función o la función anónima. Ver ejemplos para agregar funciones dentro de las clases.
$ prioridad (int) por defecto = 10. Las funciones asociadas a los ganchos / filtros se ejecutarán en la prioridad asignada. Puede tener una situación en la que desee trabajar con código antes de cualquier otra acción, establecer prioridad = 1 o después de todas las demás funciones vinculadas prioridad = 100, etc. Al igual que con todas las funciones php, puede usar la función sin pasar un valor para una variable donde se ha establecido un valor predeterminado, pero si desea cambiar el número de parámetros devueltos, debe especificar!
$ parámetros (int) por defecto = 1. El número de parámetros devueltos a su función adjunta. Los parámetros devueltos dependerán del número adjunto donde se creó el gancho. Vea apply_filters() y do_action() para más detalles.

Observaciones

Wordpress Hooks

Algo que a menudo confunde a los desarrolladores cuando comienzan a trabajar con WordPress es el uso de apply_filters() y add_action() . A menudo verá complementos / temas que los utilizan en el código y, si no entiende el concepto, le resultará difícil trabajar con ellos.

En resumen (muy breve, busque el diagrama de flujo de carga de WordPress para conocer el proceso en detalle), WordPress se carga de la siguiente manera:

  1. wp-load.php - funciones, etc.
  2. mu-plugins: cualquier archivo que se encuentre en la carpeta mu-plugins, a menudo se usa para servir objetos almacenados en caché
  3. Complementos: sin ningún orden en particular, se cargarán los complementos instalados y activados
  4. Tema infantil activo / tema principal
  5. init - resto de datos
  6. modelo

Si usted es un desarrollador y está trabajando con un archivo de funciones, puede ver que ambos se cargan antes en el proceso que los archivos con los que está trabajando. Lo que significa que no puede modificar procesos (tenga en cuenta que no puede sobrescribir funciones) o variables que se ejecutan más tarde o que aún no se hayan definido. También los desarrolladores de temas pueden colocar enlaces en su código para permitir que los complementos se conecten o los complementos podrían permitir que otros complementos sobrescriban sus variables. Ahora esto puede ser confuso hasta ahora, pero aguanta.

Para entender add_filter() y add_action() necesitamos ver cómo se crean los ganchos en primer lugar.

$arga= 'hello';
do_action('im_a_hook', $arga );

Cuando encuentre lo anterior en WordPress, llamará a cualquier función adjunta al gancho im_a_hook (busque $wp_filter para obtener información sobre el proceso). En su función adjunta, $arga estará disponible para que funcione la función adjunta.

add_action('im_a_hook', 'attached_function');

function attached_function($arga){
     echo $arga;
}

Esto abre nuevas y poderosas oportunidades para modificar variables en ciertos puntos del proceso de carga. ¿Recuerda que dijimos anteriormente que las plantillas se cargan después de los complementos / temas? Un complemento común es WooCommerce, que crea pantallas más adelante en el proceso. No voy a documentar cómo, pero se puede encontrar un ejemplo de do_action en el complemento.

do_action( 'woocommerce_after_add_to_cart_button' );

Aquí tenemos un gancho creado que no devuelve ninguna variable, pero aún podemos divertirnos con él:

add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');

function special_offer(){
    echo '<h1>Special Offer!</h1>;
}

El add_action anterior se hará echo un encabezado de oferta especial donde se encuentra do_action('woocommerce_after_add_to_cart_button') que es cuando se crea una pantalla de WooCommerce. Así que podemos usar este gancho para insertar html. Otros usos podrían incluir redirigir a una pantalla diferente por completo, etc.

También se pueden pasar múltiples variables a la función. Prueba esto en tus funciones de temas. Tenga en cuenta el último parámetro que estamos configurando en 3, porque queremos trabajar con los 3 parámetros disponibles. Si cambiamos esto a 2, solo se devolverían 2 y obtendríamos un error indefinido.

add_action('custom_hook', 'attached_function', 10, 3);

function attached_function($a,$b,$c){
    
    var_dump($a);
    var_dump($b);
    var_dump($c);
    
}
    

$arga = 1;
$argb = 2;
$argc = 3;

do_action('custom_hook', $arga, $argb, $argc);
exit;

Hay otro tipo de gancho WP llamado filtro. Un filtro es diferente de una acción en su uso, una acción solo puede recibir variables, obviamente estas variables están dentro del alcance de las funciones (usted debe saber qué alcance de php es, si no Google). Los filtros devuelven los datos devueltos, por lo que puede utilizar para modificar las variables.

$filter_me= apply_filters('im_a_filter', $variable_to_filter);

Cuando vea lo anterior, puede modificar el valor de $filter_me ya que cualquier dato que devuelva será el valor almacenado en la variable. Entonces, por ejemplo (note que estamos cambiando $variable_to_filter a $filter_me en el ejemplo):

add_filter('im_a_filter', 'attached_function', 100);

function attached_function($filter_me){
    
    $filter_me= 'ray';
    
    return $filter_me;
    
}


$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);

La variable $filter_me ahora contendrá 'ray' en lugar de 'bob' , hemos establecido una prioridad de 100, por lo que estamos razonablemente seguros de que nadie cambiará el valor después de su uso (puede haber varios filtros ejecutándose en el mismo gancho). ahora puede cambiar las variables utilizadas más adelante en el proceso si apply_filters() está presente.

También puede pasar varios parámetros, pero solo puede cambiar el valor de uno. También debe devolver un valor, o de lo contrario su variable no contendrá nada. Si entiendes cómo usar php para asignar valores / arrays / objetos a las variables, esto será obvio para ti, por ejemplo:

add_filter('im_a_filter', 'attached_function', 100, 3);

function attached_function($filter_me, $arga, $argb){
    
    $filter_me= 'ray'.$arga.$argb;

    $arga= 'you fool';
    
    return $filter_me;
    
}

$filter_me = 'bob';

$arga = ' middlename';
$argb = ' surname';

$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);

La variable $filter_me ahora contiene 'ray middlename surname' . Pero ¿qué pasa con $arga ? Esto todavía contiene 'middlename' , cambiar un $arga a 'you fool' dentro de nuestra función no tiene efecto en el valor definido fuera de su alcance (hay formas, google globals, etc.)

add_action ($ hook_name, $ function, $ prioridad, $ parámetros)

add_filter ($ hook_name, $ function, $ priority, $ parameters);

add_action - init

add_action('init', 'process_post');

function process_post(){
   if($_POST)
     var_dump($_POST);
}

add_action - init - función anónima

add_action('init' , function(){
    echo 'i did something';
});

add_action - init - dentro del objeto de clase

 class sample{

     public function __construct(){
         add_action('init', array($this, 'samp') );
     }


     public function samp(){ // must be public!!
         echo 'i did something';
     }
 }

 new sample();   

add_action - init - dentro de la clase estática

 class sample{

     public static function add_action_func(){
         //note __CLASS__ will also include any namespacing
         add_action('init', array(__CLASS__, 'samp') );
     }

     public static function samp(){
         echo 'i did something';
     }
     
 }

 sample::add_action_func();


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow