{"id":230792,"date":"2022-12-19T10:24:00","date_gmt":"2022-12-19T07:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230792"},"modified":"2022-12-07T10:03:16","modified_gmt":"2022-12-07T07:03:16","slug":"wordpress-widgets-refactoring-del-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-widgets-refactoring-del-9\/","title":{"rendered":"WordPress-widgets: Refactoring, del 9"},"content":{"rendered":"\n<p>\u00c4ven om det sista inl\u00e4gget i den h\u00e4r refactoring-serien inte var otroligt l\u00e5ngt, tycker jag att det var lite t\u00e4tt. Det vill s\u00e4ga att det kr\u00e4vdes en hel del arbete f\u00f6r att f\u00e5 koden p\u00e5 en plats som vi l\u00e4ttare kan arbeta med den.<\/p>\n<p>Men det \u00e4r bara det: Allt arbete vi gjorde borde g\u00f6ra det l\u00e4ttare att g\u00e5 vidare med resten av koden vi beh\u00f6ver skriva.<\/p>\n<p>Och f\u00f6r att se till att vi drar nytta av det arbete och grunden vi har lagt hittills, kommer vi att avsluta serien med en upps\u00e4ttning kortare, mer fokuserade artiklar som borde ta kortare tid att l\u00e4sa, implementera och f\u00f6rst\u00e5 vad vi g\u00f6r med koden.<\/p>\n<h2>WordPress Widget Boilerplate: Refactoring del 9<\/h2>\n<p>Minns fr\u00e5n f\u00f6rra inl\u00e4gget:<\/p>\n<blockquote>\n<p>D\u00e4refter forts\u00e4tter vi att bygga ut funktionalitet f\u00f6r det administrativa omr\u00e5det f\u00f6r widgeten. Efter det kommer vi att rikta v\u00e5r uppm\u00e4rksamhet mot den offentliga sidan av widgeten samt serialiseringsfunktionalitet.<\/p>\n<\/blockquote>\n<p>Och detta g\u00f6r oss redo f\u00f6r exakt vart vi \u00e4r p\u00e5 v\u00e4g i det h\u00e4r inl\u00e4gget. Vi kommer n\u00e4mligen att skriva ett administrativt gr\u00e4nssnitt som l\u00e5ter oss:<\/p>\n<ul>\n<li>definiera en titel f\u00f6r widgeten,<\/li>\n<li>definiera textinneh\u00e5ll f\u00f6r widgeten,<\/li>\n<li>och v\u00e4xla om vi vill visa titeln eller inte.<\/li>\n<\/ul>\n<p>Det \u00e4r inte t\u00e4nkt att vara innovativt och det \u00e4r inte heller t\u00e4nkt att vara den typ av widget som n\u00e5gon annan kanske vill s\u00e4lja. Ist\u00e4llet \u00e4r det t\u00e4nkt att visa hur vi kan ta det vi har f\u00f6r att skapa n\u00e5got som liknar det vi redan har sett i WordPress och hur vi anv\u00e4nder solida programmeringsmetoder.<\/p>\n<h3>Anv\u00e4ndargr\u00e4nssnittet: Ett f\u00f6rsta pass<\/h3>\n<p>Efter v\u00e5rt arbete f\u00f6rra g\u00e5ngen har vi en widget som visas i det administrativa omr\u00e5det f\u00f6r WordPress och den kan till och med flyttas till en sidof\u00e4lt eller annat widgetiserat omr\u00e5de; men det g\u00f6r faktiskt ingenting.<\/p>\n<p>F\u00f6r nu, l\u00e5t oss g\u00e5 vidare och l\u00e4gga till tre element till anv\u00e4ndargr\u00e4nssnittet:<\/p>\n<ol>\n<li>l\u00e4gg till en textinmatning f\u00f6r titeln p\u00e5 widgeten,<\/li>\n<li>inkludera ett textomr\u00e5deselement f\u00f6r att visa vad som kan vara ett textstycke,<\/li>\n<li>och slutligen, l\u00e4gg till en kryssruta f\u00f6r att v\u00e4xla titelinformationen.<\/li>\n<\/ol>\n<p>F\u00f6r att g\u00f6ra detta m\u00e5ste vi redigera en fil i katalogen <strong>Views .<\/strong> Vi kommer n\u00e4mligen att uppdatera\u00a0 filen <strong>Admin.php<\/strong>. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Vi b\u00f6rjar med elementen<\/a> exakt efter behov utan ovidkommande uppm\u00e4rkning.<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Det kommer inte att ge mycket att titta p\u00e5 i front-end \u00e4n, men det kommer oss n\u00e4rmare dit vi vill vara.<\/p>\n<h3>En klass f\u00f6r administrat\u00f6rer<\/h3>\n<p>D\u00e4refter vill vi se till att vi h\u00e5ller oss konsekventa med att uppr\u00e4tth\u00e5lla en h\u00f6g niv\u00e5 av sammanh\u00e5llning med v\u00e5ra klasser. Det betyder att vi inte beh\u00f6ver en enda klass f\u00f6r att g\u00f6ra allt f\u00f6r administration, visning och allt annat arbete som kr\u00e4vs av WordPress API.<\/p>\n<p>F\u00f6r det \u00e4ndam\u00e5let skapar vi en andra klass som heter <strong>WidgetAdmin<\/strong> i <strong>WordPress<\/strong> &#8211; katalogen och namnutrymmet.<\/p>\n<p>I den h\u00e4r filen kommer vi att inkludera <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6ljande kod<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of WordPress Widget Boilerplate\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\n\/**\n * Manages the administrative functionality of the widget.\n *\/\nclass WidgetAdmin extends Widget\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct($widgetSlug)\n    {\n        parent::__construct($widgetSlug);\n    }\n\n    \/**\n     * Displays the administrative view of the form and includes the options\n     * for the instance of the widget as arguments passed into the function.\n     *\n     * @param array $instance the options for the instance of this widget.\n     *\/\n    public function form($instance)\n    {\n        include plugin_dir_path(__FILE__).'Views\/Admin.php';\n    }\n}\n<\/code><\/pre>\n<p>Sedan, i den ursprungliga koden f\u00f6r att instansiera v\u00e5r widget, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kommer vi att \u00e4ndra den h\u00e4r raden<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new Widget('widget-name'));\n}<\/code><\/pre>\n<p>F\u00f6r att se <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new WidgetAdmin('widget-name'));\n}<\/code><\/pre>\n<p>Under de kommande artiklarna kommer detta att forts\u00e4tta att utvecklas, men som du kan se ser vi till att vi har en enda basklass av funktionalitet f\u00f6r att prata med WordPress och en klass specifikt f\u00f6r att rendera den administrativa formen.<\/p>\n<h3>Anv\u00e4ndargr\u00e4nssnittet: Ett andra pass<\/h3>\n<p>Slutligen, l\u00e5t oss rensa upp formul\u00e4ret s\u00e5 att det har lite mer solid UX som sm\u00e4lter in v\u00e4l med WordPress administrationsomr\u00e5det som helhet.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ta f\u00f6ljande kod<\/a> :<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Och uppdatera den s\u00e5 att den ser <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;div class=\"widget-content\"&gt;\n    &lt;p&gt;\n        &lt;input\n            type=\"text\"\n            name=\"widget-title\"\n            value=\"\"\n            placeholder=\"Widget Title\"\n            class=\"widefat\"\n        \/&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;textarea\n            name=\"widget-content\"\n            placeholder=\"Widget Content\"\n            style=\"width:100%;\"&gt;&lt;\/textarea&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;input\n            type=\"checkbox\"\n            value=\"1\"\n            name=\"widget-title-enabled\"\n            class=\"checkbox\"\n        \/&gt;\n        &lt;label for=\"widget-title-enabled\"&gt;Display Title?&lt;\/label&gt;\n    &lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- .widget-content --&gt;<\/code><\/pre>\n<p>F\u00f6rutsatt att allt gick bra b\u00f6r du nu se n\u00e5got som ser ut s\u00e5 h\u00e4r:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.png\" alt=\"WordPress-widgets: Refactoring, del 9\" ><\/a><\/p>\n<p>Och det \u00e4r d\u00e4r vi ska sluta med de administrativa funktionerna f\u00f6r det h\u00e4r inl\u00e4gget. Kom ih\u00e5g att du ocks\u00e5 kan sp\u00e5ra allt detta i utvecklargrenen p\u00e5 GitHub.<\/p>\n<h2>Sanering och serialisering<\/h2>\n<p>I n\u00e4sta inl\u00e4gg kommer vi att titta p\u00e5 vad som \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r att sanera och serialisera (eller reng\u00f6ra och spara) inneh\u00e5llet i v\u00e5r widget.<\/p>\n<p>Vi kommer ocks\u00e5 att se till att vi visar informationen i det administrativa omr\u00e5det efter att informationen har sparats och h\u00e4mtats.<\/p>\n<p>\u00c4ntligen kommer arvet och klasssammanh\u00e5llningen att forts\u00e4tta att utvecklas, men fokusera nu p\u00e5 det som tas upp i det h\u00e4r inl\u00e4gget och sedan forts\u00e4tter vi i n\u00e4sta artikel.<\/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>Vi vill se till att vi f\u00f6rblir konsekventa med att uppr\u00e4tth\u00e5lla en h\u00f6g niv\u00e5 av sammanh\u00e5llning med v\u00e5ra klasser som b\u00f6rjar med WordPress-widgetadministration.<\/p>\n","protected":false},"author":1,"featured_media":234899,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[807,724],"tags":[1173],"class_list":["post-230792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230792","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=230792"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}