Una guía de los ganchos de WordPress
Publicado: 2021-07-19El sistema de ganchos puede parecer abrumador para los no iniciados, pero son una de las mejores cosas de WordPress. Esta guía lo ayudará a comprender los fundamentos de los ganchos y cómo usarlos, brindándole ejemplos de uso y más consejos.

¿Por qué debería usar ganchos?
En caso de que aún no lo sepa, es una muy mala idea cambiar los archivos centrales en WordPress (WP). Dejando a un lado los riesgos de seguridad, sus cambios se sobrescribirán cada vez que actualice WP. Lo mismo ocurre con los complementos y los temas.
Claro, puede realizar un seguimiento de cada actualización y volver a implementar sus cambios. También podría perforar a través de una colmena para llegar a la miel. Puede parecer conveniente, pero es probable que tarde o temprano te piquen.
En pocas palabras, debe usar ganchos porque compensan los riesgos de cambiar la funcionalidad principal .
En este sentido, no se puede exagerar la importancia de los ganchos . Son clave para la extensibilidad de WP y una piedra angular de sus ecosistemas de complementos y temas. Se ahorrará muchos dolores de cabeza aprendiendo los conceptos básicos y utilizándolos bien.
¿Qué son?
Puede pensar en los ganchos como eventos que ocurren a lo largo de la secuencia de carga de WP. Cuando WP encuentra un gancho, activa todas las funciones adjuntas a ese gancho antes de continuar.
Por lo tanto, puede aprovechar los ganchos para agregar funcionalidad o cambiar variables en WP . Puede usar ganchos existentes y agregar nuevos. Puede quitar los ganchos que no necesita. Puede golpear el mismo gancho más de una vez, priorizando cada función como mejor le parezca. Es un sistema muy flexible, limitado solo por los ganchos disponibles y los datos que exponen.
¿Cómo trabajan?
Agrega una más o más funciones a un gancho. Su tema, complementos o WP también pueden agregar otras funciones. Cuando WP se carga, encontrará el gancho. Comprueba una lista de todas las funciones asociadas con el gancho. WP ejecuta todas estas funciones en orden de prioridad . Una vez hecho esto, reanuda la carga de todo después del gancho.
¿Qué es lo que parecen?
Agregar una función a un gancho se ve así:
add_action ($ nombre_enganche, $ nombre_función, $ prioridad, $ argumentos);
$ hook_name es el nombre del gancho al que desea apuntar
$ function_name es el nombre de la función que desea agregar a ese gancho
$ prioridad es un número entero que indica el function_name $ 's prioridad en $ hook_name' cola de s. Cuanto menor sea el número, mayor es la prioridad. A partir de 1, este número puede ser tan alto como desee (dentro de los límites del sistema), pero es poco probable que lo vea por encima de 40. El valor predeterminado es 10.
$ argumentos es un número entero que indica el número de argumentos que está utilizando en la función. Este debe coincidir con el número de argumentos pasados a la función. El valor predeterminado es 1.
Eliminar una función de un gancho es casi lo mismo:
remove_action ($ nombre_enganche, $ nombre_función, $ prioridad);
El function_name y $ $ prioridad debe coincidir con los valores originales de la función add_action correspondiente, o no será eliminado!
Tipos de anzuelo
Hay dos tipos principales de anzuelos: anzuelos de acción y anzuelos de filtro . Son similares en muchos aspectos: add_action () y su contraparte add_filter () se llaman de la misma manera. La diferencia está en la función por la que pasa:
// Ejecuta algún código
add_action ('dónde_hacer_lo_algo', 'hacer_lo_algo');
function do_the_thing () {
// Realizar alguna acción requerida para hacer la cosa
}// Cambiar una variable
add_filter ('la_ cosa', 'cambiar_la_cosa');
function change_the_thing ($ cosa) {
// Filtra $ cosa y cambia a lo que necesites, luego ...devolver $ cosa;
}
Tenga en cuenta que en el segundo ejemplo, el primer argumento pasa al functio n es el valor que se está modificado. Cualquier argumento adicional sería solo para utilidad y no se pasa a través del gancho.
Es posible que haya notado que omití $ prioridad y $ argumentos . Esto se debe a que los valores predeterminados están bien. Si ayuda, lo anterior es esencialmente lo mismo que:
// Ejecuta algún código
add_action ('donde_hacer_the_thing', 'hacer_the_thing', 10, 1);
// Cambiar una variable
agregar_filtro ('la_ cosa', 'cambiar_la_cosa', 10, 1);
Estos son ejemplos artificiales, por supuesto, pero ilustran la principal diferencia entre los dos: los filtros son para cambiar variables, las acciones son para agregar código.
Ejemplos menos artificiales
Supongamos que desea que WP envíe una notificación por correo electrónico cuando un nuevo usuario se registre en su sitio. Refiriéndose al códice WP, encontrará el gancho de acción user_register . Esto le proporciona una variable $ user_id , que puede usar para obtener los detalles del usuario. wp_mail () se encarga del resto:
add_action ('user_register', 'notificar_en_user_registration');
function notify_on_user_registration ($ user_id) {// Obtener el usuario
$ usuario = get_user_by ('id', $ user_id);// Preparar el asunto y el cuerpo del correo electrónico
$ asunto = "Registro de nuevo usuario";
$ message = “Se ha registrado un nuevo usuario {$ user-> first_name} {$ user-> last_name}.”;// Envía el correo electrónico
wp_mail ('[email protected]', $ asunto, $ mensaje);
}
¿Qué sucede si desea redirigir a los usuarios a su página principal al iniciar sesión? Esto se logra fácilmente con el enlace login_redirect , que proporciona la URL a la que se redirige a los usuarios de forma predeterminada:

add_filter ('login_redirect', 'redirect_user_on_login');
function redirect_user_on_login ($ redirect_to) {
return home_url ();
}
Poco después de agregar esto, rápidamente se da cuenta de que, como administrador, desea que lo lleven directamente al panel de WP en lugar de a la página de inicio. No hay problema, simplemente modifique el gancho para que funcione solo para administradores:
add_filter ('login_redirect', 'redirect_user_on_login', 10, 3);
function redirect_user_on_login ($ redirect_to, $ request, $ user) {
// Cambie la URL de inicio de sesión a menos que el usuario sea administrador
if (isset ($ usuario-> roles) && is_array ($ usuario-> roles)) {
if (in_array ('administrador', $ usuario-> roles)) {
return $ redirect_to; // Redirigir a los administradores a los valores predeterminados (área de administración)
}
}return $ redirect_to;
}
¡Observe que los argumentos $ prioridad y $ han entrado en juego!
Dado que necesita acceder al tercer argumento del gancho para verificar el nivel del usuario, debe mostrar 3 argumentos; pasa un valor de 3.
El valor de $ prioridad de 10 es el mismo que el predeterminado, por supuesto, pero se especifica para alcanzar el valor de $ argumentos que necesitaba anteriormente.
Creando tus propios ganchos
¡El poder de crear ganchos personalizados está en tus manos! Las funciones proporcionadas por WP se ven así:
hacer_acción ($ nombre_enganche, $ arg_1, $ arg_2… $ arg_n);
aplicar_filtros ($ nombre_enganche, $ arg_1, $ arg_2… $ arg_n);
Nuevamente, son algo similares. Ambas funciones aceptan un nombre: aquí es donde se nombra el gancho. Todos los siguientes argumentos son los mismos argumentos disponibles para las funciones que agrega a ese gancho. apply_filters () debe tener al menos un argumento adicional (el argumento que se filtra), pero todos los demás son opcionales.
Por ejemplo, si desea inyectar un script de análisis justo antes de su etiqueta de cuerpo de apertura, pero no desea convertir header.php en un desastre:
<? php do_action ('before_body_tag'); ?;>
</head>
<cuerpo>
Luego, puede agregar tantos scripts como necesite:
add_action ('antes_body_tag', 'add_analytics_custom');
function add_analytics_custom () {
// Las etiquetas <script> y el código de análisis van aquí
}
apply_filters () funciona de forma ligeramente diferente. Como se discutió anteriormente, los filtros se utilizan para modificar valores. Dado que los filtros devuelven un valor, asigna su llamada apply_filters () a una variable:
<? php $ text = apply_filters ('call_to_action_text', 'Acerca de nosotros'); ?>
<a href = ”<? php echo get_permalink ('acerca de'); ?> ”Clase =” botón cta ”>
<? php echo $ texto; ?>
</a>// Alternativamente, puede hacer eco del resultado de apply_filters () directamente
<a href = ”<? php echo get_permalink ('acerca de'); ?> ”Clase =” botón cta ”>
<? php echo apply_filters ('call_to_action_text', 'Acerca de nosotros'); ?>
</a>
Luego, puede modificar la variable filtrada según sea necesario:
add_filter ('call_to_action_text', 'change_call_to_action_text');
function change_call_to_action_text ($ texto) {
if (is_front_page ()) {
$ text = 'Descubre más';
}return $ texto;
}
Las desventajas
Ningún sistema es perfecto y los ganchos no son una excepción. Cuando se trata de ganchos centrales, generalmente tienes que conformarte con lo que te dan. Muy de vez en cuando, encontrará situaciones en las que un gancho no está en el lugar más conveniente para usted. No hay mucho que se pueda hacer cuando esto sucede, así que considérelo como una oportunidad para encontrar una solución creativa.
Además, dado que los ganchos pueden existir en cualquier lugar dentro de la estructura de directorios de WP, a veces es complicado encontrar dónde está sucediendo cierta lógica. Esto se puede compensar separando sus enlaces de función en sus propios archivos.
Más consejos
- Al crear funciones para ganchos, asegúrese de que el nombre sea único, de lo contrario se producirá un conflicto. ¡Lo mismo ocurre con los nombres de filtros y ganchos personalizados!
- Utilice ganchos para mantener sus plantillas ordenadas. Algunos ganchos genéricos de do_action () insertados a lo largo de sus plantillas pueden ayudar a mantener la lógica alejada del marcado (casi siempre es una buena idea).
- Cuando instale un nuevo complemento, compruebe qué enlaces proporciona y piense cómo podría utilizarlos. Esto es especialmente útil para los tiempos inevitables que un plugin no acaba de hacer lo que quiera.
- Al agregar una acción o un filtro, puede reemplazar el nombre de la función con la función en sí. Esto puede ayudar a mantener las acciones y los filtros autocontenidos. Las funciones agregadas de esta manera no se pueden eliminar usando remove_action () o remove_filter () , ¡así que tenga cuidado!
add_action ('donde_hacer_the_thing', function () {
echo 'La cosa está hecha.';
}, 10, 1);
- Consulte las otras funciones relacionadas con el gancho disponibles, como did_action () o has_action () . Nunca se sabe cuándo será útil estar al tanto de ellos.
Resumen
El uso de anzuelos es una cuestión de costumbre. Intente hacerse dos preguntas sencillas cada vez que trabaje en su proyecto de WP:
- "¿Hay algún gancho que me facilite esto?"
- "¿Puedo agregar un gancho que lo haga más fácil para mí en el futuro?"
Una vez que se acerque al desarrollo de WP con esta actitud, encontrará que se abren muchas puertas.
Los ejemplos de esta guía son la punta del iceberg. Hay cientos de ganchos solo en el núcleo de WP, por no hablar de la enorme biblioteca de complementos y temas. Eche un vistazo a la referencia de acción y filtro de WP para ver la lista completa de ganchos de WP principales.
Si necesita ayuda con su desarrollo web, no dude en contactarnos.
