{"id":228547,"date":"2022-10-23T10:00:00","date_gmt":"2022-10-23T07:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228547"},"modified":"2022-11-09T02:57:18","modified_gmt":"2022-11-08T23:57:18","slug":"cuando-usar-las-subacciones-de-wordpress-y-que-son","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/cuando-usar-las-subacciones-de-wordpress-y-que-son\/","title":{"rendered":"Cu\u00e1ndo usar las subacciones de WordPress (\u00bfy qu\u00e9 son?)"},"content":{"rendered":"\n<p>Recientemente pas\u00e9 por el proceso de usar un constructor de clase para <a href=\"https:\/\/wordpress.mediadoma.com\/es\/detener-la-ejecucion-del-complemento-sin-una-dependencia\/\" title=\"evitar que un complemento funcione\" >evitar que un complemento funcione<\/a> si no se carga una dependencia esperada.<\/p>\n<p>Aunque no considero que esta estrategia en particular sea un problema para una dependencia \u00fanica o en ciertas situaciones, hay formas en que esto puede conducir a olores de c\u00f3digo.<\/p>\n<p>Tambi\u00e9n nos impide usar una funci\u00f3n nativa de Core llamada subacciones de WordPress:<\/p>\n<p><a href=\"https:\/\/twitter.com\/JJJ\/status\/822265137935646720\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/twitter.com\/JJJ\/status\/822265137935646720<\/a><\/p>\n<p>Pero antes de analizar las subacciones, quiero asegurarme de tener claros los problemas que se pueden generar con el uso del enfoque condicional (frente a las subacciones) con olores de c\u00f3digo.<\/p>\n<h2>Subacciones de WordPress<\/h2>\n<p>Hay muchas formas en que se pueden explicar los olores del c\u00f3digo, pero mi forma favorita <a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_smell\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">proviene de Martin Fowler<\/a> :<\/p>\n<blockquote>\n<p>\u2026los olores son ciertas estructuras en el c\u00f3digo que indican una violaci\u00f3n de los principios fundamentales del dise\u00f1o y tienen un impacto negativo en la calidad del dise\u00f1o.<\/p>\n<\/blockquote>\n<p>Hay otra gran p\u00e1gina sobre <a href=\"https:\/\/sourcemaking.com\/refactoring\/smells\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">olores de c\u00f3digo en Source Making<\/a> que recomiendo leer si tienes la oportunidad.<\/p>\n<p>Y la forma en que los condicionales pueden conducir a errores de c\u00f3digo es simple: tiene el potencial de ensuciar su c\u00f3digo con un conjunto masivo de declaraciones que incluyen muchas comprobaciones <a href=\"https:\/\/php.net\/manual\/en\/function.class-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">class_exists<\/a>.<\/p>\n<p>Y eso es un problema.<\/p>\n<p>Cada vez que introduce otra dependencia en su c\u00f3digo, termina agregando otra verificaci\u00f3n condicional para ver si una clase est\u00e1 presente en la aplicaci\u00f3n de WordPress.<\/p>\n<p>Creo que est\u00e1 bien hacer esto con una sola dependencia, tal vez incluso dos dependencias, y si est\u00e1 trabajando &quot;lo suficientemente alto&quot; en su arquitectura, pero esta no es la forma de manejar esto correctamente con muchas dependencias ni en un nivel inferior en tu complemento<\/p>\n<p>Ah\u00ed es donde las subacciones de WordPress entran en escena. Puede ver una lista de subacciones en el tweet a trav\u00e9s de John arriba.<\/p>\n<p>Tambi\u00e9n hay una definici\u00f3n oficial de subacciones en el <a href=\"https:\/\/codex.bbpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bbPress Codex<\/a> :<\/p>\n<blockquote>\n<p>Estas acciones internas pueden considerarse como &quot;subacciones&quot; y le permiten agregar o reordenar acciones de WordPress seg\u00fan sea necesario para los complementos que dependen de bbPress.<\/p>\n<\/blockquote>\n<p>Y puedes ver un ejemplo de ello <a href=\"https:\/\/bbpress.trac.wordpress.org\/browser\/trunk\/src\/includes\/core\/actions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en este archivo<\/a>.<\/p>\n<p>Claro, esta definici\u00f3n es espec\u00edfica de bbPress, pero eso no significa que no sea aplicable a lo que hacemos en WordPress.<\/p>\n<p>Caso en cuesti\u00f3n: si alguna vez us\u00f3 <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a> para definir una acci\u00f3n personalizada, o si aprovech\u00f3 un enlace proporcionado por otra persona fuera del n\u00facleo de WordPress, entonces est\u00e1 familiarizado con la estrategia de implementar una acci\u00f3n secundaria.<\/p>\n<p>En otras palabras, las subacciones de WordPress son simplemente acciones que podemos usar para cambiar el orden en el que nuestro complemento depende de otro complemento.<\/p>\n<p>La forma en que esto se implementa puede variar dentro del contexto de su trabajo, pero podr\u00eda decirse que la forma m\u00e1s popular y &quot;correcta&quot; de WordPress de hacerlo es aprovechar el <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">argumento de prioridad<\/a> para cuando se carga su complemento.<\/p>\n<p>Es decir, tome la prioridad de la dependencia y aseg\u00farese de que sea anterior a la activaci\u00f3n de su complemento.<\/p>\n<p>Hay m\u00e9todos alternativos que se pueden usar, como cambiar el comportamiento de los complementos cada vez que est\u00e1n activados o no, pero esto est\u00e1 fuera del alcance de esta publicaci\u00f3n en particular y puede alterar negativamente la experiencia del usuario (de WordPress en general, nada menos).<\/p>\n<p>Independientemente, el punto es que cuando se trata de usar subacciones de WordPress, programaci\u00f3n orientada a objetos y administraci\u00f3n de dependencias de terceros, aseg\u00farese de que las decisiones que est\u00e1 tomando no da\u00f1en el dise\u00f1o de su c\u00f3digo.<\/p>\n<p>Si tiene sentido verificar la existencia de una clase, est\u00e1 bien, pero si tiene m\u00e1s sentido esperar hasta que un conjunto de clases o complementos se hayan cargado antes que el suyo, entonces las subacciones de WordPress probablemente tengan m\u00e1s sentido.<\/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>Cuando utilice subacciones de WordPress, OOP y dependencias de terceros, aseg\u00farese de que sus decisiones no da\u00f1en el dise\u00f1o de su c\u00f3digo.<\/p>\n","protected":false},"author":1,"featured_media":221089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,810,716,914,840,861],"tags":[1172],"class_list":["post-228547","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-complementos","category-desarrollador","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228547","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=228547"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228547\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/221089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}