{"id":229298,"date":"2022-10-22T10:19:00","date_gmt":"2022-10-22T07:19:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229298"},"modified":"2022-11-09T06:22:07","modified_gmt":"2022-11-09T03:22:07","slug":"arresta-lesecuzione-del-plug-in-senza-una-dipendenza","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/arresta-lesecuzione-del-plug-in-senza-una-dipendenza\/","title":{"rendered":"Arresta l&#8217;esecuzione del plug-in senza una dipendenza"},"content":{"rendered":"\n<p>Se ti avvicini molto allo sviluppo di plugin di WordPress da una prospettiva orientata agli oggetti, alla fine arriverai a un punto in cui non stai facendo molta interazione direttamente con il core di WordPress stesso.<\/p>\n<p>E, nella mia mente, \u00e8 una buona cosa. \u00c8 un segno di un&#8217;architettura che stai strutturando correttamente il tuo codice. Questo \u00e8:<\/p>\n<ol>\n<li>Hai WordPress seduto al livello di base,<\/li>\n<li>Hai una serie di classi che si trovano appena sopra WordPress responsabili dell&#8217;invio di informazioni da e verso WordPress tra il plug-in,<\/li>\n<li>E hai il resto del tuo codice che comprende il resto delle funzionalit\u00e0.<\/li>\n<\/ol>\n<p>Il modo in cui viene implementato pu\u00f2 variare, ma il modo in cui lo immagino \u00e8 lo stesso in cui tendo a pensare all&#8217;applicazione standard <a href=\"https:\/\/en.wikipedia.org\/wiki\/Multitier_architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">di livello N in<\/a> cui hai il livello dati, il livello applicazione e il front-end.<\/p>\n<p>Fatta eccezione per questa volta, hai WordPress, un livello per comunicare con WordPress e il resto del tuo codice e, sai, il resto del tuo codice.<\/p>\n<p>Come pu\u00f2 essere organizzato un plugin.<\/p>\n<p>Quindi cosa succede quando si desidera interrompere l&#8217;esecuzione del plug-in quando deve interagire con una dipendenza di terze parti e dovrebbe essere eseguito solo se tale dipendenza \u00e8 presente?<\/p>\n<h2>Interrompi l&#8217;esecuzione del plug-in<\/h2>\n<p>A causa della natura di PHP e WordPress, ci sono alcuni modi in cui questo pu\u00f2 essere fatto. Il codice che ho intenzione di condividere non prescrive il modo per farlo.<\/p>\n<p>Invece, questo \u00e8 un modo per farlo (che \u00e8 stato estratto da qualcosa che \u00e8 in fase di sviluppo). Inoltre, mostrer\u00f2 come interagisce anche con alcuni altri componenti dei plugin.<\/p>\n<h3>1 Il costruttore<\/h3>\n<p>Se leggi abbastanza articoli su WordPress e sulla programmazione orientata agli oggetti, probabilmente scoprirai che i costruttori non dovrebbero essere usati per definire gli hook. E sono d&#8217;accordo.<\/p>\n<p>Crea un livello di accoppiamento non necessario e rende pi\u00f9 difficili le prove. Qual \u00e8, allora, lo scopo di un costruttore nel codice basato su WordPress?<\/p>\n<p>Lo uso per gli stessi motivi che ti aspetteresti in qualsiasi altro linguaggio: per inizializzare le propriet\u00e0 della classe. Nel codice qui sotto, vedrai tre cose:<\/p>\n<ol>\n<li>inizializzo una propriet\u00e0,<\/li>\n<li>Controllo per vedere se esiste una dipendenza di terze parti,<\/li>\n<li>In caso contrario, aggiungo un messaggio di errore,<\/li>\n<li>Aggiorner\u00f2 la propriet\u00e0.<\/li>\n<\/ol>\n<p>Certo, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/448d580a82b5ac615be127a0786cd3c5?ts=2#file-00-constructor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e8 dettagliato<\/a>, ma non ricorre nemmeno a codice intelligente per inizializzare i valori.<\/p>\n<pre><code>&lt;?php\n\npublic function __construct( $container) {\n\n    $this-&gt;can_run = true;\n\n    \/\/ If the dependency isn't installed, then add a message and flag execution to stop.\n    $this-&gt;messenger = $container-&gt;get( 'settings-messenger');\n    if (! class_exists( 'Acme_Dependency')) {\n\n        $this-&gt;messenger-&gt;add_error_message( 'The dependency is not installed.' );\n        $this-&gt;can_run = false;\n    }\n}\n<\/code><\/pre>\n<p>(Pi\u00f9 sono invecchiato, pi\u00f9 mi sono affezionato al codice specifico in quanto rende pi\u00f9 facile leggere, raccogliere e andare avanti a una velocit\u00e0 maggiore rispetto all&#8217;alternativa.)<\/p>\n<h3>2 Il metodo di inizializzazione<\/h3>\n<p>Dal momento che non stiamo usando un costruttore per lavorare con gli hook di WordPress, questa funzionalit\u00e0 dovrebbe esistere nel contesto di un altro metodo.<\/p>\n<p>Questo ci d\u00e0 un posto dedicato per inserire questo tipo di funzionalit\u00e0, disaccoppiarlo dal resto della classe e farlo interagire con WordPress solo quando il metodo viene invocato esplicitamente.<\/p>\n<p>Ma ricorda, l&#8217;intero punto di ci\u00f2 a cui sto arrivando ha a che fare con l&#8217;arresto dell&#8217;esecuzione di un plug-in, non con dove posizionare gli hook.<\/p>\n<p>Quindi diciamo che la dipendenza di terze parti non esiste, e allora? Ricordiamo nel costruttore, \u00e8 stata impostata una propriet\u00e0 che ci consentir\u00e0 di determinare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/448d580a82b5ac615be127a0786cd3c5?ts=2#file-01-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se dobbiamo andare avanti<\/a> con l&#8217;impostazione degli hook o meno:<\/p>\n<pre><code>&lt;?php\n\npublic function init() {\n\n    if (! $this-&gt;can_run) {\n        return;\n    }\n\n    add_action( 'admin_notices', array( $this, 'admin_notices') );\n}\n<\/code><\/pre>\n<p>E quando \u00e8 a posto, il resto del codice non verr\u00e0 eseguito.<\/p>\n<h2>Molte parole, un piccolo codice<\/h2>\n<p>Sembra un sacco di spiegazione per cos\u00ec poco codice.<\/p>\n<p>Ma una parte di questo serve anche a cercare di trasmettere il significato di avere parti di un progetto basato su WordPress separate dal resto del core in modo che le parti possano interagire con se stesse senza dover parlare esplicitamente con il core tutto il tempo.<\/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>Cosa succede quando vuoi interrompere l&#8217;esecuzione del plug-in quando deve funzionare con una dipendenza di terze parti e dovresti farlo solo se \u00e8 presente?<\/p>\n","protected":false},"author":1,"featured_media":221144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,804,720,865],"tags":[1168],"class_list":["post-229298","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-php-6","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229298","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=229298"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229298\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/221144"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}