{"id":230753,"date":"2022-12-19T10:24:00","date_gmt":"2022-12-19T07:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230753"},"modified":"2022-12-07T10:03:12","modified_gmt":"2022-12-07T07:03:12","slug":"widzety-wordpress-refaktoryzacja-czesc-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/widzety-wordpress-refaktoryzacja-czesc-9\/","title":{"rendered":"Wid\u017cety WordPress: Refaktoryzacja, cz\u0119\u015b\u0107 9"},"content":{"rendered":"\n<p>Chocia\u017c ostatni post w tej serii refaktoryzacji nie by\u0142 niesamowicie d\u0142ugi, my\u015bl\u0119, \u017ce by\u0142 troch\u0119 g\u0119sty. Oznacza to, \u017ce uzyskanie kodu w miejscu, w kt\u00f3rym \u0142atwiej nam b\u0119dzie z nim pracowa\u0107, wymaga\u0142o sporo pracy.<\/p>\n<p>Ale to tylko tyle: ca\u0142a praca, kt\u00f3r\u0105 wykonali\u015bmy, powinna u\u0142atwi\u0107 przej\u015bcie do przodu z reszt\u0105 kodu, kt\u00f3ry musimy napisa\u0107.<\/p>\n<p>Aby mie\u0107 pewno\u015b\u0107, \u017ce korzystamy z dotychczasowej pracy i fundament\u00f3w, dope\u0142nimy seri\u0119 kr\u00f3tszymi, bardziej szczeg\u00f3\u0142owymi artyku\u0142ami, kt\u00f3rych przeczytanie i wdro\u017cenie powinno zaj\u0105\u0107 mniej czasu i zrozum, co robimy z kodem.<\/p>\n<h2>Szablon WordPress Widget: Refaktoryzacja, cz\u0119\u015b\u0107 9<\/h2>\n<p>Przypomnijmy z ostatniego posta:<\/p>\n<blockquote>\n<p>Nast\u0119pnie b\u0119dziemy kontynuowa\u0107 tworzenie funkcjonalno\u015bci obszaru administracyjnego wid\u017cetu. Nast\u0119pnie zwr\u00f3cimy uwag\u0119 na publiczn\u0105 stron\u0119 wid\u017cetu oraz na funkcj\u0119 serializacji.<\/p>\n<\/blockquote>\n<p>A to ustawia nas dok\u0142adnie w tym, dok\u0105d zmierzamy w tym konkretnym po\u015bcie. Mianowicie napiszemy front-end administracyjny, kt\u00f3ry pozwoli nam:<\/p>\n<ul>\n<li>zdefiniowa\u0107 tytu\u0142 wid\u017cetu,<\/li>\n<li>zdefiniowa\u0107 tre\u015b\u0107 tekstow\u0105 wid\u017cetu,<\/li>\n<li>i prze\u0142\u0105cz, czy chcemy pokaza\u0107 tytu\u0142.<\/li>\n<\/ul>\n<p>Nie ma by\u0107 innowacyjny ani nie ma by\u0107 rodzajem wid\u017cetu, kt\u00f3ry ktokolwiek inny mo\u017ce chcie\u0107 sprzedawa\u0107. Zamiast tego ma pokaza\u0107, jak mo\u017cemy z tego, co mamy, stworzy\u0107 co\u015b podobnego do tego, co widzieli\u015bmy ju\u017c w WordPressie i jak stosujemy solidne praktyki programistyczne.<\/p>\n<h3>Interfejs u\u017cytkownika: pierwsze przej\u015bcie<\/h3>\n<p>Po naszej ostatniej pracy mamy wid\u017cet, kt\u00f3ry pojawia si\u0119 w obszarze administracyjnym WordPressa i mo\u017cna go nawet przenie\u015b\u0107 do paska bocznego lub innego wid\u017cetowanego obszaru; jednak tak naprawd\u0119 nic nie robi.<\/p>\n<p>Na razie \u015bmia\u0142o dodajmy do interfejsu u\u017cytkownika trzy elementy:<\/p>\n<ol>\n<li>doda\u0107 tekst w tytule wid\u017cetu,<\/li>\n<li>zawiera\u0107 element textarea do wy\u015bwietlania tego, co mo\u017ce by\u0107 akapitem tekstu,<\/li>\n<li>i na koniec dodaj pole wyboru, aby prze\u0142\u0105cza\u0107 informacje o tytule.<\/li>\n<\/ol>\n<p>Aby to zrobi\u0107, musimy edytowa\u0107 plik w\u00a0 katalogu <strong>Views<\/strong>. Mianowicie b\u0119dziemy aktualizowa\u0107\u00a0 plik <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\">Zaczniemy od element\u00f3w<\/a> dok\u0142adnie tak, jak s\u0105 potrzebne, bez zb\u0119dnych znacznik\u00f3w.<\/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>Nie b\u0119dzie to jeszcze wiele do ogl\u0105dania na froncie, ale zbli\u017ca nas do miejsca, w kt\u00f3rym chcemy by\u0107.<\/p>\n<h3>Klasa dla administrator\u00f3w<\/h3>\n<p>Nast\u0119pnie chcemy si\u0119 upewni\u0107, \u017ce pozostajemy konsekwentni w utrzymywaniu wysokiego poziomu sp\u00f3jno\u015bci z naszymi klasami. Oznacza to, \u017ce nie potrzebujemy jednej klasy do wykonania wszystkiego w celu administrowania, wy\u015bwietlania i wszystkich innych prac wymaganych przez API WordPress.<\/p>\n<p>W tym celu utworzymy drug\u0105 klas\u0119 o nazwie <strong>WidgetAdmin<\/strong> w katalogu i przestrzeni nazw <strong>WordPressa .<\/strong><\/p>\n<p>W tym pliku umie\u015bcimy <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nast\u0119puj\u0105cy 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>Nast\u0119pnie w oryginalnym kodzie tworzenia instancji naszego wid\u017cetu <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zmienimy t\u0119 lini\u0119<\/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>Aby wygl\u0105da\u0107 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/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>W ci\u0105gu kilku nast\u0119pnych artyku\u0142\u00f3w b\u0119dzie to ewoluowa\u0107, ale jak wida\u0107, upewniamy si\u0119, \u017ce mamy jedn\u0105 podstawow\u0105 klas\u0119 funkcjonalno\u015bci do komunikacji z WordPressem i klas\u0119 specjalnie do renderowania formularza administracyjnego.<\/p>\n<h3>Interfejs u\u017cytkownika: drugie przej\u015bcie<\/h3>\n<p>Na koniec oczy\u015b\u0107my formularz, aby mia\u0142 troch\u0119 wi\u0119cej solidnego UX, kt\u00f3ry dobrze komponuje si\u0119 z obszarem administracyjnym WordPressa jako ca\u0142o\u015bci.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">We\u017a nast\u0119puj\u0105cy 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>I zaktualizuj go tak, aby wygl\u0105da\u0142 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/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>Zak\u0142adaj\u0105c, \u017ce wszystko posz\u0142o dobrze, powiniene\u015b teraz zobaczy\u0107 co\u015b, co wygl\u0105da tak:<\/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=\"Wid\u017cety WordPress: Refaktoryzacja, cz\u0119\u015b\u0107 9\" ><\/a><\/p>\n<p>I na tym zatrzymamy si\u0119 z funkcjami administracyjnymi tego posta. Pami\u0119taj, \u017ce mo\u017cesz to wszystko \u015bledzi\u0107 r\u00f3wnie\u017c w ga\u0142\u0119zi deweloperskiej na GitHub.<\/p>\n<h2>Odka\u017canie i serializacja<\/h2>\n<p>W nast\u0119pnym po\u015bcie przyjrzymy si\u0119, co jest niezb\u0119dne do oczyszczenia i serializacji (lub oczyszczenia i zapisania) zawarto\u015bci naszego wid\u017cetu.<\/p>\n<p>Upewnimy si\u0119 r\u00f3wnie\u017c, \u017ce wy\u015bwietlamy informacje w obszarze administracyjnym po zapisaniu i pobraniu informacji.<\/p>\n<p>Wreszcie, dziedziczenie i sp\u00f3jno\u015b\u0107 klasowa b\u0119d\u0105 nadal ewoluowa\u0107, ale na razie skup si\u0119 na tym, co jest om\u00f3wione w tym po\u015bcie, a nast\u0119pnie b\u0119dziemy kontynuowa\u0107 w nast\u0119pnym artykule.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chcemy mie\u0107 pewno\u015b\u0107, \u017ce pozostajemy konsekwentni w utrzymywaniu wysokiego poziomu sp\u00f3jno\u015bci z naszymi klasami, pocz\u0105wszy od administrowania wid\u017cetami WordPress.<\/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":[721,805],"tags":[1169],"class_list":["post-230753","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-php-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230753","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230753"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230753\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230753"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230753"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}