{"id":229930,"date":"2022-11-23T13:23:00","date_gmt":"2022-11-23T10:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229930"},"modified":"2022-11-09T19:20:19","modified_gmt":"2022-11-09T16:20:19","slug":"plantillas-y-logica-condicional-con-poo-en-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/plantillas-y-logica-condicional-con-poo-en-wordpress\/","title":{"rendered":"Plantillas y L\u00f3gica Condicional con POO en WordPress"},"content":{"rendered":"\n<p>Las plantillas se est\u00e1n volviendo m\u00e1s comunes en WordPress, y lo considero algo bueno.<\/p>\n<p>Pero eso no significa que no haya proyectos que administremos que usen un enfoque m\u00e1s tradicional para mostrar plantillas o parciales. Adem\u00e1s, tampoco significa que estemos exentos de mantener bases de c\u00f3digo que usan c\u00f3digo que no usa un motor de plantillas.<\/p>\n<p>Aunque creo que las plantillas son buenas, no creo que siempre sean necesarias. Eso es contenido para otra publicaci\u00f3n, sin embargo.<\/p>\n<p>En cambio, quiero recorrer el proceso de usar la l\u00f3gica condicional de mostrar o no un parcial dentro de una plantilla y hacerlo usando programaci\u00f3n orientada a objetos.<\/p>\n<h2>Plantillas y l\u00f3gica condicional con programaci\u00f3n orientada a objetos<\/h2>\n<p>Para hacer esto, supongamos lo siguiente:<\/p>\n<ol>\n<li>Tenemos un complemento que depende de otro complemento para una caracter\u00edstica.<\/li>\n<li>El segundo complemento es opcional.<\/li>\n<li>Si no est\u00e1 presente, mostraremos un aviso. Si est\u00e1 presente, mostraremos un parcial.<\/li>\n<\/ol>\n<p>Bastante sencillo, \u00bfverdad?<\/p>\n<p>Lo \u00fanico a tener en cuenta es que toda esta l\u00f3gica se mantendr\u00e1 dentro del complemento principal (es decir, el que verificar\u00e1 la presencia del otro complemento).<\/p>\n<h3>1 La l\u00f3gica condicional de la plantilla<\/h3>\n<p>Lo primero que debe hacerse es tener una funci\u00f3n que verifique la presencia del complemento secundario. La raz\u00f3n de esto es que la plantilla se parece <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-00-template-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a esto:<\/a><\/strong><\/p>\n<pre><code>&lt;div class=\"wrap\"&gt;\n    &lt;!-- Snipping out irrelevant code in this file --&gt;\n    &lt;form id=\"yhd-upload-new-item-settings\"&gt;\n        &lt;?php if (!$this-&gt;hasSecondaryPlugin()) { ?&gt;\n            &lt;?php include_once 'partials\/error-inactive-plugin.php'; ?&gt;\n        &lt;?php } else { ?&gt;\n            &lt;h2&gt;Secondary Plugin Settings&lt;\/h2&gt;\n            &lt;p class=\"description\"&gt;The Secondary Plugin is installed and active.&lt;\/p&gt;\n            &lt;form method=\"post\" action=\"&lt;?php echo esc_html(admin_url('admin-post.php')); ?&gt;\"&gt;\n                &lt;label for=\"acme-secondary-plugin\"&gt;\n                    &lt;input type=\"checkbox\" name=\"acme-secondary-plugin\" value=\"true\"\/&gt;\n                    Would you like to automatically use the secondary plugin?\n                &lt;\/label&gt;\n                &lt;!-- Snipping out irrelevant code in this file --&gt;\n            &lt;\/form&gt;\n        &lt;?php } ?&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Y luego el parcial puede verse <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-01-error-inactive-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a><\/strong> (depende de su implementaci\u00f3n):<\/p>\n<pre><code>&lt;?php\n\/**\n * This is the partial displayed when the Secondary Plugin is not active.\n *\/\n?&gt;\n&lt;div id=\"inactive-importer-message\" class=\"error notice is-dismissible\"&gt;\n    &lt;p&gt;[The message you want to display here.]&lt;\/p&gt;\n    &lt;button type=\"button\" class=\"notice-dismiss\"&gt;\n        &lt;span class=\"screen-reader-text\"&gt;Dismiss this notice.&lt;\/span&gt;\n    &lt;\/button&gt;\n&lt;\/div&gt;&lt;!-- #inactive-importer-message --&gt;<\/code><\/pre>\n<p>Debido a c\u00f3mo se incluyen las plantillas en WordPress, la funci\u00f3n vivir\u00e1 dentro de una clase, y la clase verificar\u00e1 la presencia del complemento.<\/p>\n<p>Si usa cualquier rastreador de c\u00f3digo, es probable que active una advertencia de que el m\u00e9todo no se usa, pero el m\u00e9todo se usa, solo se usa en un archivo de plantilla. Nota en una clase. Todo eso para decir, algunos de nuestros rastreadores no son tan inteligentes. A\u00fan.<\/p>\n<h3>2 El c\u00f3digo del lado del servidor del complemento<\/h3>\n<p>Una vez que tenga la idea general de c\u00f3mo va a funcionar, es hora de escribir c\u00f3digo en su clase.<\/p>\n<p>Recuerde, esta es una funci\u00f3n simple: solo necesita verificar la presencia de un complemento. Puede hacer esto de varias maneras, pero la m\u00e1s com\u00fan podr\u00eda ser usar la funci\u00f3n API <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/is_plugin_active\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">is_active_plugin .<\/a><\/strong><\/p>\n<p>Tenga en cuenta que cuando usa esta funci\u00f3n, se basa en la idea de que sabe el nombre del complemento que est\u00e1 usando. Si no, hay otras formas, pero eso est\u00e1 fuera del alcance de esta publicaci\u00f3n.<\/p>\n<p>De todos modos, dado que la l\u00f3gica es condicional, debe devolver un valor booleano, y eso es exactamente lo que hace la funci\u00f3n API anterior. Entonces, la funci\u00f3n del lado del servidor puede verse <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-02-hassecondaryplugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Determines if the Secondary Importer is is activated.\n *\n * @return bool True if the the pklugin is active; false, otherwise.\n *\/\nprivate function hasSecondaryPlugin()\n{\n    return in_array(\n        'secondary-plugin\/secondary-plugin.php',\n        get_option('active_plugins')\n    );\n}\n<\/code><\/pre>\n<p>Y dado que el c\u00f3digo de la plantilla llama a esta funci\u00f3n (que ves arriba), determinar\u00e1 si necesita mostrar un parcial o no.<\/p>\n<h2>Suficientemente f\u00e1cil<\/h2>\n<p>Para algunos, esto es algo realmente simple; para otros, es un enfoque completamente diferente, ya que se trata de una mayor separaci\u00f3n de preocupaciones.<\/p>\n<p>Y a medida que sigo trabajando en <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fundamentos<\/a><\/strong> de programaci\u00f3n orientada a objetos con los miembros del sitio, creo que tambi\u00e9n es importante compartir algunas de las mejores pr\u00e1cticas con aquellos que pueden no ser miembros pero que est\u00e1n ansiosos por escribir un c\u00f3digo m\u00e1s organizado.<\/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>Use programaci\u00f3n orientada a objetos y l\u00f3gica condicional para separar las preocupaciones entre parciales, plantillas y c\u00f3digo del lado del servidor.<\/p>\n","protected":false},"author":1,"featured_media":164710,"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-229930","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\/229930","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=229930"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229930\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/164710"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}