{"id":229588,"date":"2022-10-30T13:41:00","date_gmt":"2022-10-30T10:41:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229588"},"modified":"2022-11-09T08:35:45","modified_gmt":"2022-11-09T05:35:45","slug":"interfacce-dei-plugin-di-wordpress-lavorare-con-le-risorse","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/interfacce-dei-plugin-di-wordpress-lavorare-con-le-risorse\/","title":{"rendered":"Interfacce dei plugin di WordPress: lavorare con le risorse"},"content":{"rendered":"\n<p>Uno dei vantaggi di lavorare con la programmazione orientata agli oggetti \u00e8 la capacit\u00e0 di definire interfacce in modo che le classi che implementano tali interfacce abbiano un insieme rigoroso di funzioni che dette classi devono implementare.<\/p>\n<p>Questa \u00e8 <a href=\"https:\/\/stackoverflow.com\/a\/1022066\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la definizione<\/a> di un&#8217;interfaccia di classe, comunque:<\/p>\n<blockquote>\n<p>Un&#8217;interfaccia \u00e8 un contratto che specifica un insieme di metodi, campi e propriet\u00e0 che saranno disponibili su qualsiasi oggetto di implementazione<\/p>\n<\/blockquote>\n<p>Ma come potrebbe apparire se miriamo a creare una soluzione con spazio dei nomi per includere le interfacce dei plugin di WordPress (o un&#8217;interfaccia) per una classe che pu\u00f2 essere utilizzata per accodare fogli di stile o file JavaScript?<\/p>\n<h2>Interfacce plugin di WordPress: risorse<\/h2>\n<p>Ai fini di questo post, supponiamo che stiamo definendo un&#8217;interfaccia che verr\u00e0 utilizzata nell&#8217;area di amministrazione di WordPress. Cio\u00e8, creeremo un&#8217;interfaccia che verr\u00e0 utilizzata per accodare fogli di stile e file JavaScript.<\/p>\n<p>Dovremo incorporare quanto segue:<\/p>\n<ul>\n<li>uno spazio dei nomi che pu\u00f2 essere utilizzato durante tutto il progetto,<\/li>\n<li>una funzione per inizializzare la classe,<\/li>\n<li>una funzione per accodare effettivamente gli asset.<\/li>\n<\/ul>\n<p>E poich\u00e9 questo \u00e8 abbastanza generico da poter essere utilizzato per JavaScript e fogli di stile, ho scelto di chiamarlo semplicemente <strong>Asset<\/strong>.<\/p>\n<p>Il risultato finale potrebbe assomigliare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-00-interface-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeAdminInterfaces;\n\ninterface Asset {\n\n    public function init();\n    public function enqueue();\n}\n<\/code><\/pre>\n<p>Successivamente, dobbiamo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-01-javascript-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implementare effettivamente l&#8217;interfaccia<\/a> con una classe. Dovrebbe essere relativamente semplice poich\u00e9 abbiamo impostato i metodi che devono essere implementati.<\/p>\n<p>Si noti, tuttavia, che fornisco un paio di propriet\u00e0 impostate nel costruttore della classe. Questi sono specifici di questa classe e rendono un po&#8217; pi\u00f9 semplice l&#8217;atto di accodare un file.<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeAdmin;\nuse AcmeAdminInterfaces;\n\nclass JavaScript_Assets implements InterfacesAsset {\n\n    private $assets_dir;\n\n    private $js_dir;\n\n    public function __construct() {\n\n        $this-&gt;assets_dir = trailingslashit(\n            plugin_dir_url( __FILE__ ). 'assets'\n        );\n\n        $this-&gt;js_dir = trailingslashit( $this-&gt;assets_dir. 'js' );\n    }\n\n    public function init() {\n\n        add_action(\n            'admin_enqueue_scripts',\n            array( $this, 'enqueue') );\n    }\n\n    public function enqueue() {\n\n        wp_enqueue_script(\n            'toggle-admin-notices',\n            $this-&gt;js_dir. 'admin.js',\n            array( 'jquery' ),\n            false\n        );\n    }\n}\n<\/code><\/pre>\n<p>Alcune cose da notare sul codice sopra:<\/p>\n<ul>\n<li>utilizza la\u00a0 parola chiave <strong>use<\/strong> in modo che PHP sappia che lavoreremo con l&#8217; interfaccia <strong>Asset ,<\/strong><\/li>\n<li>Ho preceduto il nome con <strong>JavaScript<\/strong>, quindi \u00e8 chiaro con quale tipo di risorsa sto lavorando.<\/li>\n<\/ul>\n<p>Infine, per istanziare la classe che implementa l&#8217;interfaccia, fai semplicemente <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-02-class-instantiation-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$assets = new AdminJavaScript_Assets();\n$assets-&gt;init();\n<\/code><\/pre>\n<p>Certo, questo particolare esempio \u00e8 semplice e ho lasciato fuori i soliti commenti sul codice, ma in genere \u00e8 per motivi di leggibilit\u00e0. Se vuoi vedere qualcosa di simile in azione, controlla il codice sorgente per<\/p>\n<p>Se vuoi vedere qualcosa di simile in azione, controlla il codice sorgente per <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questo particolare plugin<\/a>.<\/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>Come potrebbe apparire se miriamo a creare una soluzione per le interfacce dei plugin di WordPress per una classe che pu\u00f2 essere utilizzata per accodare le risorse?<\/p>\n","protected":false},"author":1,"featured_media":220968,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,720,844,865],"tags":[1168],"class_list":["post-229588","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","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\/229588","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=229588"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229588\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}