tutorial lista hooks functions español do_action add_action php wordpress closures hook anonymous-function

php - lista - hooks wordpress tutorial



Funciones anónimas en los ganchos de WordPress (2)

El uso de cierres tiene la ventaja de mantener limpio el espacio de nombres global , ya que no es necesario crear primero una función global para pasarla como una devolución de llamada.

add_action(''admin_init'', function () { // some code... });

Personalmente, preferiría utilizar cierres como devoluciones de llamadas, a menos que :

  • Desea la posibilidad de eliminar la devolución de llamada
  • La función de devolución de llamada debe usarse más de una vez
  • Necesita soporte para versiones anteriores de PHP (menos de 5.3)

Cierres en clases

Los cierres también pueden ser beneficiosos dentro de las clases .

class SomeClass { public function __construct() { add_action(''wp_head'', function () { $this->addSomeStyling(); }); } protected function addSomeStyling() { echo ''<style> body { color: #999; } </style>''; } }

Normalmente, los métodos de devolución de llamada deben hacerse públicos , pero en este caso también puede hacerlos privados o protegidos .

Esta solución solo funciona para PHP 5.4+. Para que también funcione para PHP 5.3, debe pasar explícitamente la referencia $this object al cierre, como:

public function __construct() { $self = $this; add_action(''wp_head'', function () use ($self) { $self->addSomeStyling(); }); }

Los ganchos de WordPress se pueden usar de dos maneras:

  1. usar el nombre de la función de devolución de llamada y la función apropiada

    add_action( ''action_name'', ''callback_function_name'' ); function callback_function_name() { // do something }

  2. usando la función anónima (cierre)

    add_action( ''action_name'', function() { // do something } );

¿Hay alguna diferencia para WordPress qué manera de usar? ¿Qué es lo que se prefiere y por qué?


La desventaja de la función anónima es que no puede eliminar la acción con remove_action .

Importante: Para eliminar un enlace, los argumentos $function_to_remove y $priority deben coincidir cuando se agregó el enlace. Esto aplica para filtros y acciones. No se dará ninguna advertencia sobre la falla de eliminación.

Como no definió function_to_remove , no puede eliminarlo.

Por lo tanto, nunca debe usar estos plugins o temas internos que alguien más quiera sobrescribir.