{"id":229306,"date":"2022-10-23T09:50:00","date_gmt":"2022-10-23T06:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229306"},"modified":"2022-11-09T06:24:28","modified_gmt":"2022-11-09T03:24:28","slug":"quando-utilizzare-le-sottoazioni-di-wordpress-e-cosa-sono","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/quando-utilizzare-le-sottoazioni-di-wordpress-e-cosa-sono\/","title":{"rendered":"Quando utilizzare le sottoazioni di WordPress (e cosa sono?)"},"content":{"rendered":"\n<p>Di recente ho esaminato il processo di utilizzo di un costruttore di classe per <a href=\"https:\/\/wordpress.mediadoma.com\/it\/arresta-lesecuzione-del-plug-in-senza-una-dipendenza\/\" title=\"impedire a un plug-in di funzionare\" >impedire a un plug-in di funzionare<\/a> se non viene caricata una dipendenza prevista.<\/p>\n<p>Sebbene non consideri questa particolare strategia un problema per una dipendenza una tantum o in determinate situazioni, ci sono modi in cui questo pu\u00f2 portare a odori di codice.<\/p>\n<p>Ci impedisce anche di utilizzare una funzionalit\u00e0 nativa di Core chiamata sottoazioni di WordPress:<\/p>\n<p><a href=\"https:\/\/twitter.com\/JJJ\/status\/822265137935646720\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/twitter.com\/JJJ\/status\/822265137935646720<\/a><\/p>\n<p>Ma prima di esaminare le sottoazioni, voglio assicurarmi di essere chiaro sui problemi che l&#8217;uso dell&#8217;approccio condizionale (rispetto alle sottoazioni) pu\u00f2 riprodursi con gli odori del codice.<\/p>\n<h2>Sottoazioni di WordPress<\/h2>\n<p>Ci sono molti modi in cui gli odori del codice possono essere spiegati, ma il mio modo preferito <a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_smell\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">viene da Martin Fowler<\/a> :<\/p>\n<blockquote>\n<p>\u2026gli odori sono determinate strutture nel codice che indicano la violazione dei principi fondamentali di progettazione e incidono negativamente sulla qualit\u00e0 del progetto.<\/p>\n<\/blockquote>\n<p>C&#8217;\u00e8 un&#8217;altra fantastica pagina sugli <a href=\"https:\/\/sourcemaking.com\/refactoring\/smells\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">odori del codice su Source Making<\/a> che consiglio di leggere se ne hai la possibilit\u00e0.<\/p>\n<p>E il modo in cui i condizionali possono portare a odori di codice \u00e8 semplice: ha il potenziale per disseminare il tuo codice con un enorme insieme di istruzioni che includono molti controlli <a href=\"https:\/\/php.net\/manual\/en\/function.class-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">class_exists<\/a>.<\/p>\n<p>E questo \u00e8 un problema.<\/p>\n<p>Ogni volta che introduci un&#8217;altra dipendenza nel tuo codice, finisci per aggiungere un altro controllo condizionale per vedere se una classe \u00e8 presente nell&#8217;applicazione WordPress.<\/p>\n<p>Credo che vada bene farlo con una singola dipendenza &#8211; forse anche due dipendenze &#8211; e se stai lavorando &quot;abbastanza in alto&quot; nella tua architettura, ma questo non \u00e8 come gestirlo correttamente con molte dipendenze n\u00e9 a un livello inferiore in il tuo plugin<\/p>\n<p>\u00c8 qui che entrano in gioco le sottoazioni di WordPress. Puoi vedere un elenco di sottoazioni nel tweet tramite John sopra.<\/p>\n<p>C&#8217;\u00e8 anche una definizione ufficiale delle sotto-azioni nel <a href=\"https:\/\/codex.bbpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bbPress Codex<\/a> :<\/p>\n<blockquote>\n<p>Queste azioni interne possono essere considerate &quot;azioni secondarie&quot; e consentono di aggiungere o riordinare le azioni di WordPress secondo necessit\u00e0 per i plugin che dipendono da bbPress.<\/p>\n<\/blockquote>\n<p>E puoi vederne un esempio <a href=\"https:\/\/bbpress.trac.wordpress.org\/browser\/trunk\/src\/includes\/core\/actions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">in questo file<\/a>.<\/p>\n<p>Certo, questa definizione \u00e8 specifica per bbPress, ma ci\u00f2 non significa che non sia applicabile a ci\u00f2 che facciamo in WordPress.<\/p>\n<p>Caso in questione: se hai mai usato <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a> per definire un&#8217;azione personalizzata, o hai sfruttato un hook fornito da qualcun altro al di fuori del core di WordPress, allora hai familiarit\u00e0 con la strategia di implementazione di un&#8217;azione secondaria.<\/p>\n<p>In altre parole, le sottoazioni di WordPress sono semplicemente azioni che possiamo utilizzare per modificare l&#8217;ordine in cui il nostro plug-in dipende da un altro plug-in.<\/p>\n<p>Il modo in cui viene implementato pu\u00f2 variare nel contesto del tuo lavoro, ma il modo pi\u00f9 popolare e &quot;corretto&quot; di WordPress per farlo \u00e8 probabilmente sfruttare l&#8217; <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">argomento prioritario<\/a> per quando il tuo plug-in viene caricato.<\/p>\n<p>Cio\u00e8, prendi la priorit\u00e0 della dipendenza e assicurati che sia prima di quando il tuo plugin \u00e8 attivato.<\/p>\n<p>Esistono metodi alternativi che possono essere utilizzati, come modificare il comportamento dei plug-in ogni volta che vengono attivati \u200b\u200bo meno, ma questo esula dallo scopo di questo particolare post e potrebbe alterare negativamente l&#8217;esperienza dell&#8217;utente (di WordPress in generale, non meno).<\/p>\n<p>Indipendentemente da ci\u00f2, il punto \u00e8 che quando si tratta di utilizzare le sottoazioni di WordPress, la programmazione orientata agli oggetti e la gestione delle dipendenze di terze parti, assicurati che le decisioni che stai prendendo non danneggino il design del tuo codice.<\/p>\n<p>Se ha senso verificare l&#8217;esistenza di una classe, ok, ma se ha pi\u00f9 senso attendere che una serie di classi o plug-in sia stata caricata prima della tua, allora le sottoazioni di WordPress probabilmente hanno pi\u00f9 senso.<\/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>Quando utilizzi sottoazioni di WordPress, OOP e dipendenze di terze parti, assicurati che le tue decisioni non danneggino il design del tuo codice.<\/p>\n","protected":false},"author":1,"featured_media":221089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,814,720,844,865],"tags":[1168],"class_list":["post-229306","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-plugin-2","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229306","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=229306"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229306\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/221089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}