{"id":230493,"date":"2022-11-23T13:34:00","date_gmt":"2022-11-23T10:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230493"},"modified":"2022-11-09T22:38:28","modified_gmt":"2022-11-09T19:38:28","slug":"modelli-e-logica-condizionale-con-oop-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/modelli-e-logica-condizionale-con-oop-in-wordpress\/","title":{"rendered":"Modelli e logica condizionale con OOP in WordPress"},"content":{"rendered":"\n<p>La creazione di modelli sta diventando sempre pi\u00f9 comune in WordPress e la considero una buona cosa.<\/p>\n<p>Ma ci\u00f2 non significa che non ci siano progetti che gestiamo che utilizzano un approccio pi\u00f9 tradizionale alla visualizzazione di modelli o parziali. Inoltre, non significa nemmeno che siamo esenti dal mantenere basi di codice che utilizzano codice che non utilizza un motore di modelli.<\/p>\n<p>Anche se penso che la creazione di modelli sia buona, non penso che sia sempre necessaria. Questo \u00e8 il contenuto per un altro post, per\u00f2.<\/p>\n<p>Invece, voglio esaminare il processo di utilizzo della logica condizionale se visualizzare o meno un parziale all&#8217;interno di un modello e farlo utilizzando la programmazione orientata agli oggetti.<\/p>\n<h2>Modellistica e logica condizionale con OOP<\/h2>\n<p>Per fare ci\u00f2, assumiamo quanto segue:<\/p>\n<ol>\n<li>Abbiamo un plugin che dipende da un altro plugin per una funzione.<\/li>\n<li>Il secondo plugin \u00e8 facoltativo.<\/li>\n<li>Se non \u00e8 presente, visualizzeremo un avviso. Se \u00e8 presente, visualizzeremo un parziale.<\/li>\n<\/ol>\n<p>Abbastanza diretto, giusto?<\/p>\n<p>L&#8217;unica cosa da notare \u00e8 che tutta questa logica verr\u00e0 mantenuta all&#8217;interno del plugin principale (ovvero quello che verificher\u00e0 la presenza dell&#8217;altro plugin).<\/p>\n<h3>1 La logica condizionale del modello<\/h3>\n<p>La prima cosa da fare \u00e8 avere una funzione che verificher\u00e0 la presenza del plugin secondario. La ragione di ci\u00f2 \u00e8 perch\u00e9 il modello sta facendo per assomigliare <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-00-template-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo:<\/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>E poi il parziale potrebbe assomigliare <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-01-error-inactive-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo<\/a><\/strong> (dipende dalla tua implementazione):<\/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>A causa del modo in cui i modelli sono inclusi in WordPress, la funzione vivr\u00e0 all&#8217;interno di una classe e la classe verificher\u00e0 la presenza del plug-in.<\/p>\n<p>Se usi uno sniffer di codice, probabilmente attiver\u00e0 un avviso che il metodo non \u00e8 usato, ma il metodo \u00e8 usato, \u00e8 solo usato in un file modello. Nota in una classe. Tutto ci\u00f2 per dire, alcuni dei nostri sniffer non sono cos\u00ec intelligenti. Ancora.<\/p>\n<h3>2 Il codice lato server del plug-in<\/h3>\n<p>Una volta che hai un&#8217;idea generale su come funzioner\u00e0, \u00e8 il momento di scrivere il codice nella tua classe.<\/p>\n<p>Ricorda, questa \u00e8 una funzione semplice: deve solo verificare la presenza di un plug-in. Puoi farlo in alcuni modi, ma il pi\u00f9 comune potrebbe essere usare la funzione 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>Nota che quando usi questa funzione, si basa sull&#8217;idea che conosci il nome del plugin che stai usando. In caso contrario, ci sono altri modi, ma questo esula dallo scopo di questo post.<\/p>\n<p>Ad ogni modo, poich\u00e9 la logica \u00e8 condizionale, deve restituire un valore booleano, ed \u00e8 esattamente ci\u00f2 che fa la funzione API sopra. Quindi la funzione lato server pu\u00f2 assomigliare <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/fe4cbdc9eb5e6409fb4f9e3e1784f97d#file-02-hassecondaryplugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questa:<\/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>E poich\u00e9 il codice del modello chiama questa funzione (che vedi sopra), determiner\u00e0 se deve mostrare un parziale o meno.<\/p>\n<h2>Abbastanza facile<\/h2>\n<p>Per alcuni, questa \u00e8 roba davvero semplice; per altri, \u00e8 un approccio completamente diverso in quanto si occupa di una maggiore separazione delle preoccupazioni.<\/p>\n<p>E mentre continuo a lavorare su <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">OOP Fundamentals<\/a><\/strong> con i membri del sito, penso che sia importante anche condividere alcune delle migliori pratiche con coloro che potrebbero non essere membri ma desiderosi di scrivere codice pi\u00f9 organizzato.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usa la programmazione orientata agli oggetti e la logica condizionale per separare le preoccupazioni tra parziali, modelli e codice lato server.<\/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":[896,720,844,865],"tags":[1168],"class_list":["post-230493","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230493"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230493\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/164710"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}