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:
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 }
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.