{"id":230375,"date":"2022-12-04T17:19:00","date_gmt":"2022-12-04T14:19:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230375"},"modified":"2022-12-04T17:19:31","modified_gmt":"2022-12-04T14:19:31","slug":"lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-1\/","title":{"rendered":"Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1"},"content":{"rendered":"\n<p>A medida que continuamos analizando lo que significa ser <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/the-independent-wordpress-developer\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un desarrollador independiente de WordPress<\/a><\/strong>, las herramientas necesarias y las diversas estrategias que pueden mejorar nuestro conjunto de habilidades, he estado hablando sobre las diversas constantes, complementos y herramientas para ayudarnos.<\/p>\n<p>Si simplemente se est\u00e1 tropezando con esta publicaci\u00f3n, le recomiendo que consulte <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/herramientas-nativas-de-depuracion-de-wordpress-que-no-requieren-un-ide\/\" title=\"mi gu\u00eda de herramientas de depuraci\u00f3n nativas de WordPress\">mi gu\u00eda de herramientas de depuraci\u00f3n nativas de WordPress<\/a><\/strong>, as\u00ed como el resto de las publicaciones de la serie <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/the-independent-wordpress-developer\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hasta el momento.<\/a><\/strong><\/p>\n<p>Despu\u00e9s de todo, me parece importante que todos estemos trabajando sobre la misma base, o algo estrechamente relacionado, cuando analizamos esta informaci\u00f3n.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e7490c88078.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-163025-61e7490c88078.png\" alt=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1\"><\/a><\/p>\n<p>En \u00faltima instancia, usar una herramienta como <strong><a href=\"https:\/\/xdebug.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Xdebug<\/a><\/strong> es indispensable, pero tenemos que trabajar en eso (para aquellos que tienen curiosidad, <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/usando-xdebug-con-valet-y-wordpress\/\" title=\"escrib\u00ed una breve gu\u00eda\">escrib\u00ed una breve gu\u00eda<\/a><\/strong> sobre esto hace poco m\u00e1s de un a\u00f1o).<\/p>\n<p>Sin embargo, por ahora, comencemos con lo b\u00e1sico. En la publicaci\u00f3n anterior, me fui con la siguiente declaraci\u00f3n:<\/p>\n<blockquote>\n<p>En la pr\u00f3xima publicaci\u00f3n, comenzaremos a analizar lo que es necesario para examinar el registro de errores que genera WordPress y c\u00f3mo comprender la informaci\u00f3n que vemos.<\/p>\n<\/blockquote>\n<p>Y eso es lo que quiero ver hoy porque, al menos, les dar\u00e1 algo pr\u00e1ctico sobre lo cual trabajar.<\/p>\n<h2>Comprender los registros de errores de WordPress, parte 1<\/h2>\n<p>Antes de profundizar demasiado en esto, quiero abordar una pregunta que plante\u00f3 un miembro del sitio.<\/p>\n<p>Es decir, me preguntaron:<\/p>\n<blockquote>\n<p>\u00bfCu\u00e1ndo vamos a ver los principios orientados a objetos?<\/p>\n<\/blockquote>\n<p>Aunque he cubierto un poco sobre esto <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en una serie anterior<\/a><\/strong>, es algo en lo que estoy trabajando para cubrir m\u00e1s a fondo m\u00e1s adelante en esta serie.<\/p>\n<p>Sin embargo, dicho esto, comencemos a ver los registros de errores.<\/p>\n<h3>Configurando sus constantes<\/h3>\n<p>Si no ha configurado las constantes en su archivo <strong>wp-config.php<\/strong>, le recomiendo que lo haga ahora, ya que esto le brindar\u00e1 el mayor nivel de granularidad al examinar cualquier problema que pueda surgir.<\/p>\n<p>Si no se ha puesto al d\u00eda, aseg\u00farese de leer <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/herramientas-nativas-de-depuracion-de-wordpress-que-no-requieren-un-ide\/\" title=\"esta publicaci\u00f3n\">esta publicaci\u00f3n<\/a><\/strong> (y si lo ha hecho, aseg\u00farese de que <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-11-wp-config-debug-full-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">las siguientes constantes<\/a><\/strong> est\u00e9n definidas en su archivo de configuraci\u00f3n):<\/p>\n<pre><code>&lt;?php\ndefine( 'WP_DEBUG', true );\ndefine( 'WP_DEBUG_LOG', true );\ndefine( 'WP_DEBUG_DISPLAY', true );\n@ini_set( 'display_errors', 1 );\ndefine( 'SCRIPT_DEBUG', true );\ndefine( 'SAVEQUERIES', true );<\/code><\/pre>\n<p>Una vez que est\u00e9n en su lugar, tendr\u00e1 todo lo que necesita no solo para ver la informaci\u00f3n en la pantalla, sino tambi\u00e9n en el registro de depuraci\u00f3n que generar\u00e1 WordPress.<\/p>\n<h3>\u00bfD\u00f3nde est\u00e1 el registro?<\/h3>\n<p>Dependiendo de la naturaleza de su entorno, esto puede variar; sin embargo, en la mayor\u00eda de los casos, encontrar\u00e1 <strong>debug.log<\/strong> en el directorio <strong>wp-content que se encuentra sobre los directorios de<\/strong> <strong>complementos<\/strong>, <strong>temas<\/strong> y <strong>cargas<\/strong>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e74910d3457.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-163025-61e74910d3457.png\" alt=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1\"><\/a><\/p>\n<p>Como puede ver en la vista previa de la captura de pantalla anterior, mi archivo de depuraci\u00f3n tiene mucho contenido. Echaremos un vistazo a eso m\u00e1s en profundidad en la siguiente secci\u00f3n, as\u00ed como tambi\u00e9n c\u00f3mo entenderlo. Mientras tanto, sin embargo, verifique si este archivo existe. Si es as\u00ed, si\u00e9ntase libre de seguir adelante y leer detenidamente el contenido del archivo. Puede o no entender gran parte de lo que est\u00e1 sucediendo, pero el contenido del archivo significa que algo en un tema o complemento est\u00e1 activando varias <strong><a href=\"https:\/\/secure.php.net\/manual\/en\/function.error-reporting.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">advertencias, avisos y errores de PHP<\/a><\/strong> que WordPress detecta y descarga en el archivo de registro.<\/p>\n<h3>\u00bfQu\u00e9 significa el archivo de registro?<\/h3>\n<p>Esto no significa necesariamente que algo est\u00e9 roto, pero indica que algo no est\u00e1 funcionando como deber\u00eda, que no se est\u00e1 capturando y manejando adecuadamente a nivel program\u00e1tico, o simplemente est\u00e1 haciendo algo que no deber\u00eda estar haciendo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e749148c865.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-163025-61e749148c865.png\" alt=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1\"><\/a><\/p>\n<p>No tiene que verse as\u00ed (\u00a1pero puede!).<\/p>\n<p>Como desarrolladores, debemos esforzarnos por asegurarnos de que nuestro c\u00f3digo no genere nada que se escriba en el registro de errores.<\/p>\n<p>Una cosa es hacerlo en desarrollo, ya que podemos obtener informaci\u00f3n sobre qu\u00e9 es lo que estamos haciendo y c\u00f3mo funciona WordPress. Sin embargo, otra cosa es que algo que lanzamos a nivel de producci\u00f3n genere tales cosas.<\/p>\n<h3>Lectura del registro de errores<\/h3>\n<p>Obviamente, hay m\u00e1s para leer el registro de errores en lugar de simplemente abrirlo. Para muchos, la impresi\u00f3n inicial es que puede ser un mont\u00f3n de jerga. Yo tambi\u00e9n entiendo eso. Pero cuando entiendes lo que te est\u00e1 mostrando, es mucho m\u00e1s f\u00e1cil de entender.<\/p>\n<p>As\u00ed que echemos un vistazo a un ejemplo realmente simple. Este tampoco es un ejemplo artificial. De hecho, este es uno que proviene de un complemento en el que estaba trabajando. El registro de errores contiene <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-12-error-log-example-1-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la siguiente informaci\u00f3n<\/a><\/strong> :<\/p>\n<pre><code>[05-Jul-2018 19:43:53 UTC] PHP Fatal error:  Uncaught Error: Class 'EasyEmailExportAdminEmailExportSubmenu' not found in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php:37\n#8 \/U in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 37\n[05-Jul-2018 19:44:03 UTC] PHP Warning:  include_once(.\/src\/Admin\/EmailExportSubmenu.php): failed to open stream: No such file or directory in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25\n[05-Jul-2018 19:44:03 UTC] PHP Warning:  include_once(): Failed opening '.\/src\/Admin\/EmailExportSubmenu.php' for inclusion (include_path='.:\/usr\/local\/Cellar\/php\/7.2.5\/share\/php\/pear') in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25<\/code><\/pre>\n<p>Observe que, en la esencia anterior, hay tres l\u00edneas. El mejor curso de acci\u00f3n al leer los registros de errores es comenzar desde abajo y avanzar hacia arriba. Esto se debe a que las cosas, cuando se ejecutan en ejecuci\u00f3n, operan en una pila.<\/p>\n<h4>Una breve digresi\u00f3n sobre las pilas<\/h4>\n<p>No entrar\u00e9 en la definici\u00f3n inform\u00e1tica del t\u00e9rmino, pero el c\u00f3digo se ejecuta y funciona de tal manera que las funciones ocurren y, literalmente, en la memoria de una computadora, se apilan una encima de la otra.<\/p>\n<p>Por lo tanto, lo m\u00e1s reciente que se ejecute siempre estar\u00e1 en la parte superior, donde la ra\u00edz de donde comienza est\u00e1 en la parte inferior. Ya que estamos escribiendo c\u00f3digo en una aplicaci\u00f3n preexistente, eso es WordPress; entonces es probable que nuestro c\u00f3digo siempre est\u00e9 en la parte superior.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e74918219d3.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-163025-61e74918219d3.png\" alt=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1\"><\/a><\/p>\n<p>Comprender los registros de errores de WordPress: no es este tipo de pila<\/p>\n<p>La idea es que el c\u00f3digo comience a ejecutarse en WordPress y avance hasta el trabajo que estamos haciendo. Cuando hay un aviso, una advertencia o un error, generalmente ser\u00e1 algo en nuestro c\u00f3digo (aunque WordPress no est\u00e1 exento, ese es generalmente el caso).<\/p>\n<p>Entonces, cuando lee el registro de errores, est\u00e1, en esencia, leyendo lo que se llama un <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Stack_trace\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seguimiento de la pila.<\/a><\/strong> Wikipedia, como est\u00e1 vinculado, tiene una definici\u00f3n bastante detallada sobre el tema, pero quiz\u00e1s la parte m\u00e1s relevante de esta publicaci\u00f3n es la siguiente:<\/p>\n<blockquote>\n<p>Los programadores suelen utilizar el seguimiento de pila durante la [depuraci\u00f3n] interactiva y post-mortem (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Debugging\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/en.wikipedia.org\/wiki\/Debugging<\/a>). Los usuarios finales pueden ver un seguimiento de la pila que se muestra como parte de un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Error_message\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mensaje de error<\/a>, que luego el usuario puede informar a un programador.<\/p>\n<\/blockquote>\n<p>Esto concuerda con lo que he esbozado anteriormente, \u00bfverdad? Pero basta de hablar sobre qu\u00e9 es un seguimiento de pila (se volver\u00e1 m\u00e1s claro a medida que profundicemos en la depuraci\u00f3n), volvamos a leer el archivo de registro tal como est\u00e1 actualmente.<\/p>\n<h3>Volver a Leer el registro<\/h3>\n<h4>Incluyendo archivos<\/h4>\n<p>Primero, veamos el resultado final en la esencia anterior. Contiene lo siguiente:<\/p>\n<pre><code>[05-Jul-2018 19:44:03 UTC] PHP Warning: include_once(): Failed opening '.\/src\/Admin\/EmailExportSubmenu.php' for inclusion (include_path='.:\/usr\/local\/Cellar\/php\/7.2.5\/share\/php\/pear') in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25<\/code><\/pre>\n<p>Esto me dice que en la l\u00ednea 25 de mi archivo, <strong>easy-email-export.php,<\/strong> no pudo abrir un archivo para su inclusi\u00f3n. Esto significa que tengo una instrucci\u00f3n <strong>include_once<\/strong> en el c\u00f3digo que hace referencia a <strong>.\/src\/Admin\/EmailExportSubmenu.php<\/strong> que no puede encontrar.<\/p>\n<p>Entonces, el mejor curso de acci\u00f3n ser\u00eda encontrar la l\u00ednea 25 y determinar por qu\u00e9 no est\u00e1 localizando el archivo. Tal vez eso es descargar el camino completo en cuanto a d\u00f3nde est\u00e1 mirando. Llegaremos a esto moment\u00e1neamente cuando hablemos de escribir en el registro de errores.<\/p>\n<h4>Dar sentido a los errores<\/h4>\n<p>En la siguiente l\u00ednea (es decir, la l\u00ednea encima de la que acabamos de ver) contiene lo siguiente:<\/p>\n<pre><code>[05-Jul-2018 19:44:03 UTC] PHP Warning: include_once(.\/src\/Admin\/EmailExportSubmenu.php): failed to open stream: No such file or directory in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25<\/code><\/pre>\n<p>Esta l\u00ednea en particular difiere solo un poco, pero brinda informaci\u00f3n adicional y est\u00e1 contenida en la cl\u00e1usula que dice &quot;No existe tal archivo o directorio&quot;. Esto es revelador porque literalmente nos dice que el archivo no existe.<\/p>\n<p>Al menos, no existe donde est\u00e1 mirando. Entonces las dos posibilidades son:<\/p>\n<ol>\n<li>no hemos creado el archivo al que hacemos referencia,<\/li>\n<li>estamos haciendo referencia a la ubicaci\u00f3n del archivo en el lugar equivocado<\/li>\n<\/ol>\n<p>Por lo tanto, lo primero que tendr\u00edamos que verificar es si el archivo existe en la ubicaci\u00f3n que estamos tratando de incluir. Si no es as\u00ed, entonces debemos crear el archivo.<\/p>\n<p>Si el archivo existe, entonces sabemos que el complemento est\u00e1 buscando cargarlo desde la ruta incorrecta. Por lo tanto, es posible que debamos mirar nuestro <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/espacios-de-nombres-y-carga-automatica-en-wordpress\/\" title=\"cargador autom\u00e1tico\">cargador autom\u00e1tico<\/a><\/strong>, nuestra ruta de inclusi\u00f3n o c\u00f3mo se recuperan los archivos. Porque, lo m\u00e1s probable es que si el archivo existe, entonces est\u00e1 tratando de cargarse desde un lugar en el que no reside.<\/p>\n<h3>Un error no detectado<\/h3>\n<p>En la l\u00ednea final del c\u00f3digo, ver\u00e1 algo como esto:<\/p>\n<pre><code>[05-Jul-2018 19:43:53 UTC] PHP Fatal error: Uncaught Error: Class 'EasyEmailExportAdminEmailExportSubmenu' not found in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php:37\n#8 \/U in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 37<\/code><\/pre>\n<p>Este es un buen ejemplo, en primer lugar, porque declara expl\u00edcitamente que se trata de un error no detectado. Esto significa que cualquiera que sea la funcionalidad, algo arroja un error y no se detecta.<\/p>\n<ul>\n<li>esto podr\u00eda ser una excepci\u00f3n,<\/li>\n<li>esto podr\u00eda ser un problema al tratar de llamar a una funci\u00f3n que no existe,<\/li>\n<li>esto podr\u00eda estar operando en una variable que no est\u00e1 definida,<\/li>\n<li>y as\u00ed.<\/li>\n<\/ul>\n<p>En \u00faltima instancia, hay una pl\u00e9tora de problemas que podr\u00edan estar presentes. La buena noticia, en este ejemplo, es que es pr\u00e1cticamente lo mismo que el anterior: No se encuentra un archivo.<\/p>\n<p>Excepto que, en lugar de lanzar una advertencia, PHP expl\u00edcitamente nos sigue, esto es un error fatal y el programa no puede continuar la ejecuci\u00f3n hasta que se resuelva esta l\u00ednea de c\u00f3digo. Antes de descartar esto como algo que es igual a la secci\u00f3n anterior (porque, por as\u00ed decirlo, lo es), debemos reconocer que esto se establece expl\u00edcitamente como un error fatal mientras que, en el ejemplo anterior, se trat\u00f3 como un advertencia.<\/p>\n<p>Hay diferentes formas de conceptualizar esto, pero la forma en que generalmente lo pienso es esta:<\/p>\n<ul>\n<li>Un aviso me dice que algo no est\u00e1 bien en el c\u00f3digo, pero no es lo suficientemente malo como para justificar la detenci\u00f3n de la ejecuci\u00f3n.<\/li>\n<li>Una advertencia es un poco m\u00e1s grave porque significa que algo est\u00e1 en peligro de no funcionar.<\/li>\n<li>Un error directamente dice &quot;esto no funciona y el programa no puede continuar&quot;.<\/li>\n<\/ul>\n<p>Ahora sabemos que el problema es espectacular, por as\u00ed decirlo, y sabemos cu\u00e1l es el problema. En pocas palabras, no se encuentra un archivo que se requiere para que el programa complete su ejecuci\u00f3n y, por lo tanto, el programa deja de funcionar.<\/p>\n<p>Eso es ciertamente un error fatal.<\/p>\n<h3>\u00bfCual es la soluci\u00f3n?<\/h3>\n<p>Lo que brindo como soluci\u00f3n a mi problema no ser\u00e1 prescriptivo en cuanto a lo que funcionar\u00e1 para usted. Para m\u00ed, era cuesti\u00f3n de una l\u00ednea en mi configuraci\u00f3n de Composer, de modo que el cargador autom\u00e1tico de Composer no pudiera ubicar el archivo en la ubicaci\u00f3n adecuada (pero esto tiene m\u00e1s que ver con la organizaci\u00f3n de archivos, el espacio de nombres, etc.).<\/p>\n<p>Para ti, puede ser algo diferente.<\/p>\n<ul>\n<li>tal vez est\u00e9 buscando un archivo en el directorio equivocado,<\/li>\n<li>tal vez el archivo tenga un nombre diferente al especificado en el c\u00f3digo,<\/li>\n<li>o tal vez es otra cosa.<\/li>\n<\/ul>\n<p>Cualquiera que sea el caso, el punto es que se trata de abrirse camino a trav\u00e9s del archivo de registro de abajo hacia arriba para diagnosticar el problema y rastrear lo que est\u00e1 haciendo PHP, WordPress y su trabajo y luego diagnosticarlo desde all\u00ed.<\/p>\n<h2>Escribir en el registro de errores<\/h2>\n<p>En la pr\u00f3xima publicaci\u00f3n, nos tomaremos un momento para ver c\u00f3mo podemos escribir en el registro de errores. A veces, leer el archivo est\u00e1 bien y simplemente ir y venir entre lo que estamos viendo y resolver los problemas est\u00e1 bien.<\/p>\n<p>Pero, \u00bfqu\u00e9 pasa en el caso de que queramos volcar algo para obtener informaci\u00f3n sobre lo que est\u00e1 viendo WordPress o PHP? Eso tambi\u00e9n es \u00fatil.<\/p>\n<p>Entonces, en la siguiente parte de esta serie sobre la comprensi\u00f3n de los registros de errores de WordPress, haremos exactamente eso.<\/p>\n<h3>\u00bfQu\u00e9 hay despu\u00e9s de eso?<\/h3>\n<p>A continuaci\u00f3n, veremos c\u00f3mo usar algunos de los complementos descritos anteriormente para probar el c\u00f3digo y tambi\u00e9n para perfilar nuestro c\u00f3digo para asegurarnos de que hemos hecho todo lo posible para garantizar que estamos produciendo un nivel de calidad.<\/p>\n<p>Esto no significa que hayamos terminado por completo con el proceso de depuraci\u00f3n, pero definitivamente estamos un paso m\u00e1s cerca y estamos posicionados para escribir c\u00f3digo con un grado de calidad que no resulta en un archivo que representa varios problemas matizados. fuimos demasiado descuidados para arreglar (y mucho menos entender).<\/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>Para comenzar a depurar su c\u00f3digo sin el uso de herramientas de terceros, \u00bfpor qu\u00e9 no mirar lo que PHP y WordPress generan y trabajar a trav\u00e9s de la comprensi\u00f3n de los registros de errores de WordPress?<\/p>\n","protected":false},"author":1,"featured_media":163026,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,840,861],"tags":[1172],"class_list":["post-230375","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230375","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=230375"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230375\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/163026"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}