{"id":231000,"date":"2022-12-19T10:36:00","date_gmt":"2022-12-19T07:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231000"},"modified":"2022-12-07T10:03:02","modified_gmt":"2022-12-07T07:03:02","slug":"widgets-de-wordpress-refactorizacion-parte-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/widgets-de-wordpress-refactorizacion-parte-9\/","title":{"rendered":"Widgets de WordPress: Refactorizaci\u00f3n, Parte 9"},"content":{"rendered":"\n<p>Aunque la \u00faltima publicaci\u00f3n de esta serie de refactorizaci\u00f3n no fue incre\u00edblemente larga, creo que fue un poco densa. Es decir, requiri\u00f3 una buena cantidad de trabajo colocar el c\u00f3digo en un lugar en el que podamos trabajar m\u00e1s f\u00e1cilmente con \u00e9l.<\/p>\n<p>Pero eso es todo: todo el trabajo que hicimos deber\u00eda facilitar el avance con el resto del c\u00f3digo que necesitamos escribir.<\/p>\n<p>Y para asegurarnos de que estamos aprovechando el trabajo y la base que hemos sentado hasta ahora, vamos a completar la serie con un conjunto de art\u00edculos m\u00e1s breves y m\u00e1s enfocados que deber\u00edan tomar menos tiempo para leer, implementar y entender lo que estamos haciendo con el c\u00f3digo.<\/p>\n<h2>El modelo de widget de WordPress: Refactorizaci\u00f3n Parte 9<\/h2>\n<p>Recuerdo del \u00faltimo mensaje:<\/p>\n<blockquote>\n<p>A continuaci\u00f3n, continuaremos desarrollando funcionalidades para el \u00e1rea administrativa del widget. Despu\u00e9s de eso, centraremos nuestra atenci\u00f3n en el lado p\u00fablico del widget, as\u00ed como en la funcionalidad de serializaci\u00f3n.<\/p>\n<\/blockquote>\n<p>Y esto nos prepara exactamente hacia d\u00f3nde nos dirigimos en esta publicaci\u00f3n en particular. Es decir, vamos a escribir una interfaz administrativa que nos permita:<\/p>\n<ul>\n<li>definir un t\u00edtulo para el widget,<\/li>\n<li>definir el contenido de texto para el widget,<\/li>\n<li>y cambiar si queremos o no mostrar el t\u00edtulo.<\/li>\n<\/ul>\n<p>No pretende ser innovador ni pretende ser el tipo de widget que alguien m\u00e1s quiera vender. En cambio, pretende mostrar c\u00f3mo podemos tomar lo que tenemos para crear algo similar a lo que ya hemos visto en WordPress y c\u00f3mo empleamos pr\u00e1cticas de programaci\u00f3n s\u00f3lidas.<\/p>\n<h3>La interfaz de usuario: un primer paso<\/h3>\n<p>Despu\u00e9s de nuestro \u00faltimo trabajo, tenemos un widget que aparece en el \u00e1rea administrativa de WordPress e incluso se puede mover a una barra lateral u otra \u00e1rea de widgets; sin embargo, en realidad no hace nada.<\/p>\n<p>Por ahora, sigamos adelante y agreguemos tres elementos a la interfaz de usuario:<\/p>\n<ol>\n<li>agregue una entrada de texto para el t\u00edtulo del widget,<\/li>\n<li>incluir un elemento de \u00e1rea de texto para mostrar lo que puede ser un p\u00e1rrafo de texto,<\/li>\n<li>y, por \u00faltimo, agregue una casilla de verificaci\u00f3n para alternar la informaci\u00f3n del t\u00edtulo.<\/li>\n<\/ol>\n<p>Para hacer esto, necesitaremos editar un archivo en el\u00a0 directorio <strong>Vistas<\/strong>. Es decir, vamos a actualizar el\u00a0 archivo <strong>Admin.php<\/strong>. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Comenzaremos con los elementos<\/a> exactamente como se necesitan sin marcas superfluas.<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Todav\u00eda no ser\u00e1 mucho para ver en la parte delantera, pero nos est\u00e1 acercando a donde queremos estar.<\/p>\n<h3>Una clase para administradores<\/h3>\n<p>A continuaci\u00f3n, queremos asegurarnos de mantener un alto nivel de cohesi\u00f3n con nuestras clases. Esto significa que no necesitamos una sola clase para hacer todo lo relacionado con la administraci\u00f3n, la visualizaci\u00f3n y todo el resto del trabajo requerido por la API de WordPress.<\/p>\n<p>Con ese fin, crearemos una segunda clase llamada <strong>WidgetAdmin<\/strong> en el directorio y espacio de nombres de <strong>WordPress .<\/strong><\/p>\n<p>En este archivo, incluiremos <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el siguiente c\u00f3digo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of WordPress Widget Boilerplate\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\n\/**\n * Manages the administrative functionality of the widget.\n *\/\nclass WidgetAdmin extends Widget\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct($widgetSlug)\n    {\n        parent::__construct($widgetSlug);\n    }\n\n    \/**\n     * Displays the administrative view of the form and includes the options\n     * for the instance of the widget as arguments passed into the function.\n     *\n     * @param array $instance the options for the instance of this widget.\n     *\/\n    public function form($instance)\n    {\n        include plugin_dir_path(__FILE__).'Views\/Admin.php';\n    }\n}\n<\/code><\/pre>\n<p>Luego, en el c\u00f3digo original para instanciar nuestro widget, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cambiaremos esta l\u00ednea<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new Widget('widget-name'));\n}<\/code><\/pre>\n<p>Para verse <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new WidgetAdmin('widget-name'));\n}<\/code><\/pre>\n<p>En los pr\u00f3ximos art\u00edculos, esto continuar\u00e1 evolucionando pero, como puede ver, nos estamos asegurando de tener una \u00fanica clase b\u00e1sica de funcionalidad para hablar con WordPress y una clase espec\u00edfica para representar el formulario administrativo.<\/p>\n<h3>La interfaz de usuario: un segundo paso<\/h3>\n<p>Finalmente, limpie el formulario para que tenga un poco m\u00e1s de experiencia de usuario s\u00f3lida que combine bien con el \u00e1rea de administraci\u00f3n de WordPress en su conjunto.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Toma el siguiente c\u00f3digo<\/a> :<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Y actual\u00edzalo para que se vea <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a> :<\/p>\n<pre><code>&lt;div class=\"widget-content\"&gt;\n    &lt;p&gt;\n        &lt;input\n            type=\"text\"\n            name=\"widget-title\"\n            value=\"\"\n            placeholder=\"Widget Title\"\n            class=\"widefat\"\n        \/&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;textarea\n            name=\"widget-content\"\n            placeholder=\"Widget Content\"\n            style=\"width:100%;\"&gt;&lt;\/textarea&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;input\n            type=\"checkbox\"\n            value=\"1\"\n            name=\"widget-title-enabled\"\n            class=\"checkbox\"\n        \/&gt;\n        &lt;label for=\"widget-title-enabled\"&gt;Display Title?&lt;\/label&gt;\n    &lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- .widget-content --&gt;<\/code><\/pre>\n<p>Suponiendo que todo haya ido bien, ahora deber\u00eda ver algo parecido a esto:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.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-160909-61e71613309d7.png\" alt=\"Widgets de WordPress: Refactorizaci\u00f3n, Parte 9\" ><\/a><\/p>\n<p>Y ah\u00ed es donde vamos a detenernos con las caracter\u00edsticas administrativas de esta publicaci\u00f3n. Recuerde que tambi\u00e9n puede realizar un seguimiento de todo esto en la rama de desarrollo en GitHub.<\/p>\n<h2>Higienizaci\u00f3n y serializaci\u00f3n<\/h2>\n<p>En la pr\u00f3xima publicaci\u00f3n, veremos qu\u00e9 es necesario para desinfectar y serializar (o limpiar y guardar) el contenido de nuestro widget.<\/p>\n<p>Tambi\u00e9n nos aseguraremos de mostrar la informaci\u00f3n en el \u00e1rea administrativa despu\u00e9s de que la informaci\u00f3n se haya guardado y recuperado.<\/p>\n<p>Finalmente, la herencia y la cohesi\u00f3n de clases continuar\u00e1n evolucionando pero, por ahora, conc\u00e9ntrese en lo que se cubre en esta publicaci\u00f3n y luego continuaremos en el pr\u00f3ximo art\u00edculo.<\/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>Queremos asegurarnos de mantener un alto nivel de cohesi\u00f3n con nuestras clases, comenzando con la administraci\u00f3n de los widgets de WordPress.<\/p>\n","protected":false},"author":1,"featured_media":234899,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,800],"tags":[1172],"class_list":["post-231000","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231000","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=231000"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231000\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}