{"id":230400,"date":"2022-12-05T13:08:00","date_gmt":"2022-12-05T10:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230400"},"modified":"2022-11-09T22:13:43","modified_gmt":"2022-11-09T19:13:43","slug":"los-fundamentos-de-los-ganchos-de-accion-en-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/los-fundamentos-de-los-ganchos-de-accion-en-wordpress\/","title":{"rendered":"Los fundamentos de los ganchos de acci\u00f3n en WordPress"},"content":{"rendered":"\n<p>Cada vez que comienza a adentrarse en una programaci\u00f3n m\u00e1s avanzada, ya sea en WordPress o cualquier otro marco, biblioteca, base o lenguaje de programaci\u00f3n, hay momentos en los que los conceptos nuevos a menudo pueden ser m\u00e1s dif\u00edciles de entender que otros.<\/p>\n<p>En general, he encontrado que esto es cierto cuando una persona ha aprendido los conceptos b\u00e1sicos de, por ejemplo, la programaci\u00f3n orientada a objetos, pero no ha estado expuesta a los matices de ciertas cosas, como los patrones de dise\u00f1o.<\/p>\n<p>Caso en cuesti\u00f3n: he escrito sobre <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el patr\u00f3n de dise\u00f1o basado en eventos<\/a><\/strong> (o <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">publicaci\u00f3n-suscripci\u00f3n<\/a><\/strong> o Pub\/Sub, como a algunos les gusta referirse a \u00e9l) <strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en otras publicaciones.<\/a><\/strong><\/p>\n<p>S\u00ed, 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\u00e9 suscrito a ese evento responder\u00e1.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466947738.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466947738.jpg\" alt=\"Los fundamentos de los ganchos de acci\u00f3n en WordPress\" ><\/a><\/p>\n<p>Foto de Claus Gr\u00fcnst\u00e4udl en Unsplash<\/p>\n<p>Este es el patr\u00f3n principal que emplea WordPress que nos permite engancharnos literalmente en ciertos puntos de ejecuci\u00f3n. En general, podemos conceptualizarlos como ganchos de acci\u00f3n en WordPress.<\/p>\n<p>De todos modos, la aplicaci\u00f3n pone a disposici\u00f3n ciertos puntos para que a\u00f1adamos nuestra propia funcionalidad. Una vez que se registra esa funcionalidad, WordPress dejar\u00e1 su base de c\u00f3digo, por as\u00ed decirlo, saltar\u00e1 a la nuestra y luego regresar\u00e1 a la nuestra.<\/p>\n<p>Es bastante f\u00e1cil de entender, pero \u00bfqu\u00e9 sucede si desea exponer \u00e1reas en su c\u00f3digo que permiten que otros se conecten a su c\u00f3digo?<\/p>\n<h2>Ganchos de acci\u00f3n en WordPress<\/h2>\n<p>Antes de ver c\u00f3mo WordPress implementa estos patrones, es importante comprender los conceptos b\u00e1sicos de este patr\u00f3n. Aunque esto no es de ninguna manera completo, est\u00e1 destinado a ayudar a brindar una comprensi\u00f3n fundamental del patr\u00f3n para que sea posible leer y escribir c\u00f3digo centrado en WordPress.<\/p>\n<p>Entonces, \u00bfcu\u00e1l es una buena manera de pensar en el patr\u00f3n Pub\/Sub? <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Wikipedia lo define como:<\/a><\/strong><\/p>\n<blockquote>\n<p>En la arquitectura de software, publicar-suscribir es un patr\u00f3n de mensajer\u00eda en el que los remitentes de mensajes, llamados editores, no programan los mensajes para que se env\u00eden directamente a receptores espec\u00edficos, llamados suscriptores, sino que clasifican los mensajes publicados en clases sin saber qu\u00e9 suscriptores, si los hay., puede haber. Del mismo modo, los suscriptores expresan inter\u00e9s en una o m\u00e1s clases y solo reciben mensajes que son de su inter\u00e9s, sin saber qu\u00e9 editores hay, si los hay.<\/p>\n<\/blockquote>\n<h3>Comprender el patr\u00f3n<\/h3>\n<p>Esto podr\u00eda ser mucho para asimilar al principio. No lo s\u00e9, pero vamos a desglosarlo:<\/p>\n<ol>\n<li>Hay un servicio, en nuestro caso WordPress, que es responsable de publicar mensajes para quien se suscribe (no necesariamente sabe qui\u00e9n est\u00e1 escuchando).<\/li>\n<li>Cuando un suscriptor est\u00e1 escuchando, tomar\u00e1 medidas cada vez que escuche esa acci\u00f3n.<\/li>\n<li>Una vez que el c\u00f3digo del suscriptor termine de ejecutarse, el programa volver\u00e1 al punto original de ejecuci\u00f3n (que es donde el editor envi\u00f3 el mensaje).<\/li>\n<\/ol>\n<p>Hay matices en esto, como la funcionalidad asincr\u00f3nica y cosas por el estilo, pero eso es m\u00e1s avanzado de lo que preferir\u00eda obtener en esta publicaci\u00f3n en particular. Despu\u00e9s de todo, el prop\u00f3sito de esto es sentar las bases para comprender e implementar la funcionalidad.<\/p>\n<p>La funcionalidad asincr\u00f3nica puede entrar en subprocesos o Ajax y esos son temas importantes, esta no es esa publicaci\u00f3n.<\/p>\n<h3>\u00bfC\u00f3mo es este aspecto en WordPress?<\/h3>\n<p>Quiz\u00e1s la forma m\u00e1s f\u00e1cil de describir este patr\u00f3n particular en WordPress es mediante el uso de llamadas a funciones:<\/p>\n<ul>\n<li>hacer_acci\u00f3n<\/li>\n<li>a\u00f1adir_acci\u00f3n<\/li>\n<\/ul>\n<p>A veces, la nomenclatura puede ser confusa, pero en pocas palabras, <strong>do_action<\/strong> publica y un evento y <strong>agrega_acci\u00f3n<\/strong> a los suscriptores de un evento. O quiz\u00e1s una mejor manera de pensarlo es<strong>:<\/strong><\/p>\n<p>do_action le dice a WordPress que realice cualquier acci\u00f3n que se haya agregado.<\/p>\n<p>A veces es \u00fatil tener frases simples para recordar c\u00f3mo funcionan las cosas. No s\u00e9 si la anterior es la frase m\u00e1s pegadiza o m\u00e1s memorable, pero es algo, \u00bfno?<\/p>\n<p>Adem\u00e1s, tenga en cuenta que <strong>do_action<\/strong> y <strong>add_action<\/strong> son cosas que son fundamentales para WordPress y tambi\u00e9n est\u00e1n disponibles para nuestro desarrollo. Antes de continuar, echemos un vistazo a lo que significa cada uno:<\/p>\n<p>Para <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hacer_acci\u00f3n<\/a> :<\/p>\n<blockquote>\n<p>Esta funci\u00f3n invoca todas las funciones adjuntas al gancho de acci\u00f3n <code>$tag<\/code>. Es posible crear nuevos ganchos de acci\u00f3n simplemente llamando a esta funci\u00f3n, especificando el nombre del nuevo gancho usando el <code>$tag<\/code>par\u00e1metro.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466d56bdd.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466d56bdd.png\" alt=\"Los fundamentos de los ganchos de acci\u00f3n en WordPress\" ><\/a><\/p>\n<p>O incluso m\u00e1s simplemente:<\/p>\n<blockquote>\n<p>Ejecutar funciones enganchadas a un gancho de acci\u00f3n espec\u00edfico.<\/p>\n<\/blockquote>\n<p>Cuando se refiere a ganchos, pueden ser <strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ganchos definidos por WordPress<\/a><\/strong> o ganchos personalizados que especifique en su tema o complemento.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467368f0b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467368f0b.png\" alt=\"Los fundamentos de los ganchos de acci\u00f3n en WordPress\" ><\/a><\/p>\n<p>En cuanto a <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_action<\/a> :<\/p>\n<blockquote>\n<p>Las acciones son los ganchos que el n\u00facleo de WordPress lanza en puntos espec\u00edficos durante la ejecuci\u00f3n, o cuando ocurren eventos espec\u00edficos. Los complementos pueden especificar que una o m\u00e1s de sus funciones de PHP se ejecuten en estos puntos, utilizando la API de acci\u00f3n.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467888f17.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467888f17.png\" alt=\"Los fundamentos de los ganchos de acci\u00f3n en WordPress\" ><\/a><\/p>\n<p>Y, de manera similar, dicho de manera m\u00e1s simple:<\/p>\n<blockquote>\n<p>Engancha una funci\u00f3n a una acci\u00f3n espec\u00edfica.<\/p>\n<\/blockquote>\n<p>Configurar esto pr\u00e1cticamente es un poco diferente porque generalmente usamos <strong>add_action<\/strong> para agregar nuestro propio c\u00f3digo a WordPress.<\/p>\n<h3>Un ejemplo pr\u00e1ctico<\/h3>\n<p>Por ejemplo, quiz\u00e1s hayas escrito algo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/035b213bd632d2ab9fc4a79acffa1342\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\nadd_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');\n\/**\n * Processes the permalink so we can remove any characters that may cause a problem when communicating\n * with the API.\n *\n * @param  array $data The array of information about the post.\n * @return array $data The data without the malformed information in the post name for the URL.\n *\/\npublic function processPermalink($data)\n{\n    if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {\n        $data['post_name'] =\n            preg_replace(\n                '\/(%ef%b8%8f|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9)\/',\n                '',\n                $data['post_name']\n            );\n    }\n    return $data;\n}\n<\/code><\/pre>\n<p>En este caso, en alg\u00fan lugar del c\u00f3digo base de WordPress hay una llamada <strong>do_action<\/strong> para el <strong>enlace wp_insert_post_data<\/strong> y acepta una funci\u00f3n y le pasar\u00e1 al menos un \u00fanico par\u00e1metro.<\/p>\n<h3>Agregar sus propios ganchos<\/h3>\n<p>Pero, \u00bfqu\u00e9 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\u00e1gina vinculada anteriormente en este documento proporciona todo lo que necesita para configurar esto.<\/p>\n<p>En realidad, es mucho m\u00e1s simple, en mi opini\u00f3n, que trabajar con <strong>add_action<\/strong> porque <strong>add_action<\/strong> proporciona que no solo nos conectamos con un editor existente, sino que agregamos nuestra propia l\u00f3gica personalizada.<\/p>\n<p><strong>do_action<\/strong>, por otro lado, requiere que proporcionemos un nombre de la funci\u00f3n que se ejecutar\u00e1 y luego la lista de argumentos que se pasar\u00e1n a la funci\u00f3n que se ejecutar\u00e1.<\/p>\n<h2>\u00bfEso es todo?<\/h2>\n<p>En t\u00e9rminos tan simples como puedo hacerlo, s\u00ed. Hay algunos matices en torno a la prioridad, la cantidad de argumentos y el trabajo con espacios de nombres y programaci\u00f3n orientada a objetos. Pero, de nuevo, eso est\u00e1 fuera del alcance de esta publicaci\u00f3n en particular. Tal vez lo har\u00e9 m\u00e1s en profundidad en otra publicaci\u00f3n.<\/p>\n<p>Sin embargo, por ahora, si no est\u00e1 familiarizado con los conceptos b\u00e1sicos de:<\/p>\n<ul>\n<li>el patr\u00f3n pub\/sub,<\/li>\n<li>hacer_acci\u00f3n,<\/li>\n<li>y agregar_acci\u00f3n<\/li>\n<\/ul>\n<p>Ahora se siente lo suficientemente c\u00f3modo para leer el c\u00f3digo con el que est\u00e1 trabajando, comprender c\u00f3mo funciona el c\u00f3digo e incluso implementar sus propias soluciones cuando sea necesario.<\/p>\n<p>Actualmente estoy escribiendo un libro electr\u00f3nico (junto con una variedad de otro contenido premium). Si est\u00e1s interesado, <a href=\"https:\/\/tommcfarlin.com\/registration-info\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">echa un vistazo a lo que obtienes<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es importante comprender los conceptos b\u00e1sicos de los ganchos de acciones en WordPress, pero antes de hacerlo, es importante reconocer el patr\u00f3n de dise\u00f1o subyacente.<\/p>\n","protected":false},"author":1,"featured_media":162882,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[861],"tags":[1172],"class_list":["post-230400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230400"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230400\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/162882"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}