Los fundamentos de los ganchos de acción en WordPress
Cada vez que comienza a adentrarse en una programación más avanzada, ya sea en WordPress o cualquier otro marco, biblioteca, base o lenguaje de programación, hay momentos en los que los conceptos nuevos a menudo pueden ser más difíciles de entender que otros.
En general, he encontrado que esto es cierto cuando una persona ha aprendido los conceptos básicos de, por ejemplo, la programación orientada a objetos, pero no ha estado expuesta a los matices de ciertas cosas, como los patrones de diseño.
Caso en cuestión: he escrito sobre el patrón de diseño basado en eventos (o publicación-suscripción o Pub/Sub, como a algunos les gusta referirse a él) en otras publicaciones.
Sí, hay algunas diferencias entre cada uno, pero la idea general es que algo sucede y se genera un evento y cualquier persona que escuche ese evento o esté suscrito a ese evento responderá.
Foto de Claus Grünstäudl en Unsplash
Este es el patrón principal que emplea WordPress que nos permite engancharnos literalmente en ciertos puntos de ejecución. En general, podemos conceptualizarlos como ganchos de acción en WordPress.
De todos modos, la aplicación pone a disposición ciertos puntos para que añadamos nuestra propia funcionalidad. Una vez que se registra esa funcionalidad, WordPress dejará su base de código, por así decirlo, saltará a la nuestra y luego regresará a la nuestra.
Es bastante fácil de entender, pero ¿qué sucede si desea exponer áreas en su código que permiten que otros se conecten a su código?
Ganchos de acción en WordPress
Antes de ver cómo WordPress implementa estos patrones, es importante comprender los conceptos básicos de este patrón. Aunque esto no es de ninguna manera completo, está destinado a ayudar a brindar una comprensión fundamental del patrón para que sea posible leer y escribir código centrado en WordPress.
Entonces, ¿cuál es una buena manera de pensar en el patrón Pub/Sub? Wikipedia lo define como:
En la arquitectura de software, publicar-suscribir es un patrón de mensajería en el que los remitentes de mensajes, llamados editores, no programan los mensajes para que se envíen directamente a receptores específicos, llamados suscriptores, sino que clasifican los mensajes publicados en clases sin saber qué suscriptores, si los hay., puede haber. Del mismo modo, los suscriptores expresan interés en una o más clases y solo reciben mensajes que son de su interés, sin saber qué editores hay, si los hay.
Comprender el patrón
Esto podría ser mucho para asimilar al principio. No lo sé, pero vamos a desglosarlo:
- Hay un servicio, en nuestro caso WordPress, que es responsable de publicar mensajes para quien se suscribe (no necesariamente sabe quién está escuchando).
- Cuando un suscriptor está escuchando, tomará medidas cada vez que escuche esa acción.
- Una vez que el código del suscriptor termine de ejecutarse, el programa volverá al punto original de ejecución (que es donde el editor envió el mensaje).
Hay matices en esto, como la funcionalidad asincrónica y cosas por el estilo, pero eso es más avanzado de lo que preferiría obtener en esta publicación en particular. Después de todo, el propósito de esto es sentar las bases para comprender e implementar la funcionalidad.
La funcionalidad asincrónica puede entrar en subprocesos o Ajax y esos son temas importantes, esta no es esa publicación.
¿Cómo es este aspecto en WordPress?
Quizás la forma más fácil de describir este patrón particular en WordPress es mediante el uso de llamadas a funciones:
- hacer_acción
- añadir_acción
A veces, la nomenclatura puede ser confusa, pero en pocas palabras, do_action publica y un evento y agrega_acción a los suscriptores de un evento. O quizás una mejor manera de pensarlo es:
do_action le dice a WordPress que realice cualquier acción que se haya agregado.
A veces es útil tener frases simples para recordar cómo funcionan las cosas. No sé si la anterior es la frase más pegadiza o más memorable, pero es algo, ¿no?
Además, tenga en cuenta que do_action y add_action son cosas que son fundamentales para WordPress y también están disponibles para nuestro desarrollo. Antes de continuar, echemos un vistazo a lo que significa cada uno:
Para hacer_acción :
Esta función invoca todas las funciones adjuntas al gancho de acción
$tag. Es posible crear nuevos ganchos de acción simplemente llamando a esta función, especificando el nombre del nuevo gancho usando el$tagparámetro.
O incluso más simplemente:
Ejecutar funciones enganchadas a un gancho de acción específico.
Cuando se refiere a ganchos, pueden ser ganchos definidos por WordPress o ganchos personalizados que especifique en su tema o complemento.
En cuanto a add_action :
Las acciones son los ganchos que el núcleo de WordPress lanza en puntos específicos durante la ejecución, o cuando ocurren eventos específicos. Los complementos pueden especificar que una o más de sus funciones de PHP se ejecuten en estos puntos, utilizando la API de acción.
Y, de manera similar, dicho de manera más simple:
Engancha una función a una acción específica.
Configurar esto prácticamente es un poco diferente porque generalmente usamos add_action para agregar nuestro propio código a WordPress.
Un ejemplo práctico
Por ejemplo, quizás hayas escrito algo como esto:
<?php
add_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');
/**
* Processes the permalink so we can remove any characters that may cause a problem when communicating
* with the API.
*
* @param array $data The array of information about the post.
* @return array $data The data without the malformed information in the post name for the URL.
*/
public function processPermalink($data)
{
if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {
$data['post_name'] =
preg_replace(
'/(%ef%b8%8f|™|®|©|™|®|©|™|®|©)/',
'',
$data['post_name']
);
}
return $data;
}
En este caso, en algún lugar del código base de WordPress hay una llamada do_action para el enlace wp_insert_post_data y acepta una función y le pasará al menos un único parámetro.
Agregar sus propios ganchos
Pero, ¿qué sucede si desea brindarles a otros desarrolladores la capacidad de conectarse a su complemento o tema? En ese caso, debe preocuparse por usar do_action y la página vinculada anteriormente en este documento proporciona todo lo que necesita para configurar esto.
En realidad, es mucho más simple, en mi opinión, que trabajar con add_action porque add_action proporciona que no solo nos conectamos con un editor existente, sino que agregamos nuestra propia lógica personalizada.
do_action, por otro lado, requiere que proporcionemos un nombre de la función que se ejecutará y luego la lista de argumentos que se pasarán a la función que se ejecutará.
¿Eso es todo?
En términos tan simples como puedo hacerlo, sí. Hay algunos matices en torno a la prioridad, la cantidad de argumentos y el trabajo con espacios de nombres y programación orientada a objetos. Pero, de nuevo, eso está fuera del alcance de esta publicación en particular. Tal vez lo haré más en profundidad en otra publicación.
Sin embargo, por ahora, si no está familiarizado con los conceptos básicos de:
- el patrón pub/sub,
- hacer_acción,
- y agregar_acción
Ahora se siente lo suficientemente cómodo para leer el código con el que está trabajando, comprender cómo funciona el código e incluso implementar sus propias soluciones cuando sea necesario.
Actualmente estoy escribiendo un libro electrónico (junto con una variedad de otro contenido premium). Si estás interesado, echa un vistazo a lo que obtienes.



