{"id":230699,"date":"2022-12-12T20:04:00","date_gmt":"2022-12-12T17:04:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230699"},"modified":"2022-12-07T11:19:07","modified_gmt":"2022-12-07T08:19:07","slug":"una-estrategia-para-inicializar-la-configuracion-del-complemento","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/una-estrategia-para-inicializar-la-configuracion-del-complemento\/","title":{"rendered":"Una estrategia para inicializar la configuraci\u00f3n del complemento"},"content":{"rendered":"\n<p>Siempre que est\u00e9 trabajando en un complemento que ofrece una p\u00e1gina para su configuraci\u00f3n, hay varias formas de guardar y recuperar la informaci\u00f3n.<\/p>\n<p>Puedes:<\/p>\n<ul>\n<li>use la <strong><a href=\"https:\/\/codex.wordpress.org\/Settings_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API de configuraci\u00f3n<\/a><\/strong> ,<\/li>\n<li>usar una p\u00e1gina personalizada y llamadas que son un h\u00edbrido de las dos,<\/li>\n<li>use alg\u00fan tipo de h\u00edbrido entre <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una p\u00e1gina de submen\u00fa<\/a><\/strong> (o <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una p\u00e1gina de men\u00fa<\/a><\/strong>) y otra funcionalidad.<\/li>\n<\/ul>\n<p>Cuanto m\u00e1s he trabajado con WordPress, menos y menos me importa usar la API de configuraci\u00f3n y optar por un enfoque un poco h\u00edbrido.<\/p>\n<p>Dependiendo de los requisitos del proyecto, la implementaci\u00f3n variar\u00e1; sin embargo, trato de usar una forma relativamente consistente para crear la funcionalidad.<\/p>\n<p>Y aunque esta publicaci\u00f3n no entrar\u00e1 en las diversas formas en que creo mis p\u00e1ginas, clases relacionadas, etc., ofrecer\u00e1 una forma en que puede inicializar la configuraci\u00f3n del complemento cuando trabaje en su proyecto o en un proyecto para otra persona.<\/p>\n<h2>Inicializar la configuraci\u00f3n del complemento<\/h2>\n<p>Para esta publicaci\u00f3n, suponga que los requisitos exigen almacenar los valores de una p\u00e1gina como una matriz asociativa que se desinfecta y serializa desde el complemento.<\/p>\n<p>Adem\u00e1s de la funcionalidad de desinfecci\u00f3n que necesitar\u00e1, tambi\u00e9n sabe que trabajar\u00e1 con:<\/p>\n<ol>\n<li>la tabla de opciones,<\/li>\n<li>y, como tal, una clave \u00fanica para las opciones almacenadas en la tabla de opciones<\/li>\n<\/ol>\n<p>Ahora, en el contexto de la programaci\u00f3n orientada a objetos, normalmente tengo varias clases configuradas para manejar toda esta funcionalidad, pero me preocupa principalmente mostrar una forma de inicializar la configuraci\u00f3n del complemento.<\/p>\n<h3>\u00bfPero por qu\u00e9?<\/h3>\n<p>Si carga una p\u00e1gina destinada a recuperar opciones de la base de datos y los valores no se han inicializado, entonces ver\u00e1 advertencias en su pantalla o aparecer\u00e1 algo en su archivo de registro de depuraci\u00f3n.<\/p>\n<p>Todo esto depende de c\u00f3mo haya configurado su instalaci\u00f3n local, as\u00ed como tambi\u00e9n de c\u00f3mo su host haya definido su configuraci\u00f3n.<\/p>\n<p>Independientemente, desea asegurarse de haber inicializado la configuraci\u00f3n del complemento para que al menos tenga la fila establecida en la base de datos y los valores iniciales o valores vac\u00edos establecidos para el complemento.<\/p>\n<h3>C\u00f3mo hacerlo<\/h3>\n<p>Como se mencion\u00f3 anteriormente, debido a que soy fan\u00e1tico del uso de clases en mi trabajo, generalmente configuro una clase que es responsable de leer y escribir valores en la base de datos. Y esto incluye la inicializaci\u00f3n de la configuraci\u00f3n del complemento.<\/p>\n<p>Para hacer esto, generalmente trabajo usando el siguiente proceso:<\/p>\n<ol>\n<li>inicializar la clase,<\/li>\n<li>verifique si existe una opci\u00f3n en la base de datos,<\/li>\n<li>si no es as\u00ed, entonces inicial\u00edcelo,<\/li>\n<li>si es as\u00ed, no hagas nada.<\/li>\n<\/ol>\n<p>El c\u00f3digo inicial para hacer esto puede verse <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-00-initialize-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Initializes the plugin settings fo ruse throughout the rest of the plugin.\n *\/\nprivate function initialize() {\n    $settings = [\n        'username' =&gt; '',\n        'user-info' =&gt; [\n              'location' =&gt; '',\n              'id-number' =&gt; '',\n              'first-name' =&gt; '',\n              'last-name' =&gt; '',\n        ],\n        'short-bio' =&gt; '',\n    ];\n    update_option('acme-plugin-settings', $settings);\n}\n<\/code><\/pre>\n<p>Pero debido a que esto est\u00e1 en su propia funci\u00f3n, puede llamarse dentro del constructor de su clase, o puede marcarlo como <strong>p\u00fablico<\/strong> y llamarlo fuera de la clase. Sin embargo, para esta publicaci\u00f3n, estoy haciendo una llamada <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-01-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en el constructor<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Intiializes the properties of the class, primarily the array of settings.\n *\/\npublic function __construct() {\n    if (false === get_option('acme-plugin-settings')) {\n        $this-&gt;initialize();\n    }\n    \/\/ More to come...\n}\n<\/code><\/pre>\n<p>Y una vez que se han inicializado los valores, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/5a9940d1364b4d15e1de755f78bd0a79#file-02-final-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se puede establecer<\/a><\/strong> un atributo en la clase :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Intiializes the properties of the class, primarily the array of settings.\n *\/\npublic function __construct() {\n    if (false === get_option('acme-plugin-settings')) {\n        $this-&gt;initialize();\n    }\n    $this-&gt;settings = get_option('acme-plugin-settings');\n}\n<\/code><\/pre>\n<p>Aunque se puede argumentar que esto no deber\u00eda hacerse en el constructor, me gusta tener propiedades de clase inicializadas dentro del constructor de dicha clase.<\/p>\n<p>Y dado que la clase es responsable de mantener una referencia a la configuraci\u00f3n, entonces tiene sentido inicializar la configuraci\u00f3n aqu\u00ed.<\/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>Esta publicaci\u00f3n no cubre varias formas de crear p\u00e1ginas de opciones, ofrece una forma de inicializar la configuraci\u00f3n del complemento.<\/p>\n","protected":false},"author":1,"featured_media":234934,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,831,800,861],"tags":[1172],"class_list":["post-230699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-guia-para-principiantes","category-php-2","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230699","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=230699"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/234934"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}