{"id":228697,"date":"2022-10-30T13:21:00","date_gmt":"2022-10-30T10:21:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228697"},"modified":"2022-11-09T03:54:25","modified_gmt":"2022-11-09T00:54:25","slug":"wordpress-plugin-graenssnitt-arbeta-med-tillgaangar","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-plugin-graenssnitt-arbeta-med-tillgaangar\/","title":{"rendered":"WordPress Plugin-gr\u00e4nssnitt: Arbeta med tillg\u00e5ngar"},"content":{"rendered":"\n<p>En av f\u00f6rdelarna med att arbeta med objektorienterad programmering \u00e4r m\u00f6jligheten att definiera gr\u00e4nssnitt s\u00e5 att klasser som implementerar dessa gr\u00e4nssnitt har en strikt upps\u00e4ttning funktioner som dessa klasser m\u00e5ste implementera.<\/p>\n<p>Det \u00e4r <a href=\"https:\/\/stackoverflow.com\/a\/1022066\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">definitionen<\/a> av ett klassgr\u00e4nssnitt, i alla fall:<\/p>\n<blockquote>\n<p>Ett gr\u00e4nssnitt \u00e4r ett kontrakt som specificerar en upps\u00e4ttning metoder, f\u00e4lt och egenskaper som kommer att vara tillg\u00e4ngliga p\u00e5 alla implementeringsobjekt<\/p>\n<\/blockquote>\n<p>Men hur kan det h\u00e4r se ut om vi siktar p\u00e5 att skapa en namnavgr\u00e4nsad l\u00f6sning f\u00f6r att inkludera WordPress-plugin-gr\u00e4nssnitt (eller ett gr\u00e4nssnitt) f\u00f6r en klass som kan anv\u00e4ndas f\u00f6r att st\u00e4lla stilmallar eller JavaScript-filer i k\u00f6?<\/p>\n<h2>WordPress Plugin-gr\u00e4nssnitt: Tillg\u00e5ngar<\/h2>\n<p>F\u00f6r detta inl\u00e4ggs syften, anta att vi definierar ett gr\u00e4nssnitt som kommer att anv\u00e4ndas i administrationsomr\u00e5det f\u00f6r WordPress. Det vill s\u00e4ga, vi kommer att skapa ett gr\u00e4nssnitt som kommer att anv\u00e4ndas f\u00f6r att st\u00e4lla stilmallar och JavaScript-filer i k\u00f6.<\/p>\n<p>Vi m\u00e5ste inf\u00f6rliva f\u00f6ljande:<\/p>\n<ul>\n<li>ett namnutrymme som kan anv\u00e4ndas under hela projektet,<\/li>\n<li>en funktion f\u00f6r att initiera klassen,<\/li>\n<li>en funktion f\u00f6r att faktiskt k\u00f6a tillg\u00e5ngarna.<\/li>\n<\/ul>\n<p>Och eftersom detta \u00e4r tillr\u00e4ckligt generiskt f\u00f6r att det kan anv\u00e4ndas f\u00f6r JavaScript och stilmallar, har jag valt att helt enkelt kalla det <strong>Asset<\/strong>.<\/p>\n<p>Slutresultatet kan se ut ungef\u00e4r <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-00-interface-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/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>D\u00e4refter m\u00e5ste vi faktiskt <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-01-javascript-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implementera gr\u00e4nssnittet<\/a> med en klass. Det borde vara relativt enkelt eftersom vi har satt de metoder som m\u00e5ste implementeras.<\/p>\n<p>Observera dock att jag tillhandah\u00e5ller ett par egenskaper som \u00e4r inst\u00e4llda i klassens konstruktor. Dessa \u00e4r specifika f\u00f6r den h\u00e4r klassen och g\u00f6r handlingen att faktiskt st\u00e4lla en fil i k\u00f6 lite l\u00e4ttare.<\/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>N\u00e5gra saker att notera om koden ovan:<\/p>\n<ul>\n<li>den anv\u00e4nder <strong>nyckelordet use<\/strong> s\u00e5 att PHP vet att vi kommer att arbeta med <strong>Asset<\/strong> -gr\u00e4nssnittet,<\/li>\n<li>Jag har prefixet namnet med <strong>JavaScript<\/strong> s\u00e5 det \u00e4r tydligt vilken typ av tillg\u00e5ng jag arbetar med.<\/li>\n<\/ul>\n<p>Slutligen, f\u00f6r att instansiera klassen som implementerar gr\u00e4nssnittet, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-02-class-instantiation-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">g\u00f6r du helt enkelt s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$assets = new AdminJavaScript_Assets();\n$assets-&gt;init();\n<\/code><\/pre>\n<p>Visst, det h\u00e4r exemplet \u00e4r enkelt och jag har l\u00e4mnat de vanliga kodkommentarerna ute men det \u00e4r generellt sett f\u00f6r l\u00e4sbarhetens skull. Om du vill se n\u00e5got liknande i aktion, granska k\u00e4llkoden f\u00f6r<\/p>\n<p>Om du vill se n\u00e5got liknande i aktion, granska k\u00e4llkoden f\u00f6r <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">just detta plugin<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hur kan det se ut om vi siktar p\u00e5 att skapa en l\u00f6sning f\u00f6r WordPress-plugin-gr\u00e4nssnitt f\u00f6r en klass som kan anv\u00e4ndas f\u00f6r att placera tillg\u00e5ngar i k\u00f6?<\/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":[848,901,922,724,868],"tags":[1173],"class_list":["post-228697","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-oevrig","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228697"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228697\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}