{"id":229493,"date":"2022-11-13T12:31:00","date_gmt":"2022-11-13T09:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229493"},"modified":"2022-11-13T12:33:57","modified_gmt":"2022-11-13T09:33:57","slug":"como-usar-los-complementos-de-wordpress-de-carga-automatica-de-psr-4","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-usar-los-complementos-de-wordpress-de-carga-automatica-de-psr-4\/","title":{"rendered":"C\u00f3mo usar los complementos de WordPress de carga autom\u00e1tica de PSR-4"},"content":{"rendered":"\n<p>Digamos que est\u00e1 trabajando en un proyecto para alguien y lo ha definido, las tareas est\u00e1n delegadas, tiene todas las bibliotecas y herramientas que necesita para comenzar, y ha separado cu\u00e1l ser\u00e1 el tema o la presentaci\u00f3n, y cu\u00e1l ser\u00e1 la funcionalidad o los complementos.<\/p>\n<p>Pero en lugar de tener un pu\u00f1ado de complementos individuales, \u00bfqu\u00e9 pasar\u00eda si hubiera un paquete de complementos funcionales m\u00e1s peque\u00f1os o micro-complementos o como quiera llamarlos trabajando para potenciar el paquete?<\/p>\n<p>Adem\u00e1s, todos estos est\u00e1n construidos sobre la misma base pero que tambi\u00e9n comparten c\u00f3digo entre s\u00ed y para hacer las cosas m\u00e1s interesantes, \u00bfopta por usar un cargador autom\u00e1tico PSR-4 a trav\u00e9s de <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> para encargarse de todo esto?<\/p>\n<h2>Complementos de WordPress de carga autom\u00e1tica PSR-4<\/h2>\n<p>Primero, la forma de pensar en lo que estoy tratando de decir (porque qui\u00e9n sabe si estoy claro \ud83d\ude43) es que tienes tu trabajo en el <code>wp-content\/plugins<\/code>directorio. Y su complemento reside, digamos, <code>acme-plugins<\/code>y tiene subdirectorios para sus microcomplementos.<\/p>\n<p>Mantendremos esto simple para este ejemplo y diremos que hay un complemento principal y luego solo un microcomplemento. El directorio se ver\u00eda as\u00ed;<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165780-61e788fa5037d.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-165780-61e788fa5037d.png\" alt=\"C\u00f3mo usar los complementos de WordPress de carga autom\u00e1tica de PSR-4\"><\/a><\/p>\n<p>Ahora, est\u00e1n los archivos que espera ver en un complemento:<\/p>\n<ul>\n<li>L\u00c9AME,<\/li>\n<li>LICENCIA,<\/li>\n<li>REGISTRO DE CAMBIOS,<\/li>\n<li>compositor.json<\/li>\n<li>compositor.lock<\/li>\n<li>vendedor<\/li>\n<li>el archivo de arranque del complemento,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Ahora aqu\u00ed est\u00e1 la cosa: si est\u00e1 usando <a href=\"http:\/\/www.php-fig.org\/psr\/psr-2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-2<\/a> y va a usar un cargador autom\u00e1tico <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a>, entonces hay dos cosas que necesita saber:<\/p>\n<ol>\n<li>Los espacios de nombres deben coincidir con la organizaci\u00f3n del directorio. Habl\u00e9 un poco sobre esto durante <a href=\"https:\/\/wordpress.mediadoma.com\/es\/espacios-de-nombres-y-carga-automatica-en-wordpress\/\" title=\"mi presentaci\u00f3n de WordCamp Atlanta 2017\">mi presentaci\u00f3n de WordCamp Atlanta 2017<\/a> (espec\u00edficamente bajo la organizaci\u00f3n virtual y l\u00f3gica).<\/li>\n<li>C\u00f3mo trabajar con <code>composer.json<\/code>para definir sus cargadores autom\u00e1ticos. Puedes leer mucho sobre esto <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md#autoloading\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>, pero dar\u00e9 las notas clave en el resto de esta publicaci\u00f3n.<\/li>\n<\/ol>\n<p>Entonces, el problema es que el <code>vendor<\/code>directorio reside un nivel por encima de donde existen algunos de los archivos de origen. Por lo tanto, la forma est\u00e1ndar de configurar un cargador autom\u00e1tico personalizado en Composer no funcionar\u00e1.<\/p>\n<p>Por ejemplo, es muy t\u00edpico <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-00-composer-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ver esto<\/a> :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/acme-plugins\",\n  \"description\": \"A demo plugin\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Acme\": \"src\/\",\n    }\n  },\n  \/\/ ...\n}<\/code><\/pre>\n<p>Pero para compensar nuestro trabajo, necesitamos <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-01-composer-updated-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hacer esto<\/a> :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/acme-plugins\",\n  \"description\": \"A demo plugin\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Acme\": \"\",\n      \"AcmeMicroPlugin\": \"MicroPlugin\/src\/\"\n    }\n  },\n  \/\/ ...\n}<\/code><\/pre>\n<p>Es un cambio simple, pero es un ejemplo simple, \u00bfverdad? Entonces, \u00bfcu\u00e1l es la conclusi\u00f3n de esto?<\/p>\n<p>Tenga en cuenta que hemos actualizado algunos cambios en la\u00a0 ubicaci\u00f3n de <strong>carga autom\u00e1tica<\/strong>. Espec\u00edficamente, esto es lo que est\u00e1 pasando:<\/p>\n<ul>\n<li>El primer elemento es el espacio de nombres de nivel superior al que pertenecer\u00e1n todos los complementos que pertenecer\u00e1n al <strong>complemento Acme<\/strong>.<\/li>\n<li>La segunda entrada se refiere al <strong>MicroPlugin<\/strong> que ve en el directorio de arriba. Esto representa el espacio de nombres para este complemento en particular, y le dice a Composer que busque archivos de origen para cargar autom\u00e1ticamente usando el directorio de propiedades<\/li>\n<\/ul>\n<p>Desde aqu\u00ed, agregar\u00e1 una nueva entrada para el cargador autom\u00e1tico correspondiente a cada microcomplemento que pertenecer\u00e1 al complemento de nivel superior.<\/p>\n<h2>Organizaci\u00f3n de futuros microcomplementos<\/h2>\n<p>Hay algunas formas en las que puede manejar la organizaci\u00f3n de su c\u00f3digo para que pueda usar un cargador autom\u00e1tico predeterminado.<\/p>\n<p>Si sigue el modelo de microcomplemento (a falta de un t\u00e9rmino mejor), entonces no funcionar\u00e1, por lo que tendr\u00e1 que reorganizar sus archivos, y eso puede ser una molestia con el tiempo.<\/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>PSR-4 La carga autom\u00e1tica de complementos de WordPress no es dif\u00edcil, pero \u00bfqu\u00e9 sucede si desea usar un complemento compuesto por una variedad de complementos y cargarlos autom\u00e1ticamente tambi\u00e9n?<\/p>\n","protected":false},"author":1,"featured_media":223885,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,810,840,861],"tags":[1172],"class_list":["post-229493","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-complementos","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229493","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=229493"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229493\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}