{"id":230824,"date":"2022-12-19T17:20:00","date_gmt":"2022-12-19T14:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230824"},"modified":"2022-12-19T17:20:40","modified_gmt":"2022-12-19T14:20:40","slug":"wordpressi-vidinad-uembertoeoetamine-8-osa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-uembertoeoetamine-8-osa\/","title":{"rendered":"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 8. osa"},"content":{"rendered":"\n<p>Mis puutub WordPressi vidina katlaplaadi \u00fcmbert\u00f6\u00f6tamisse, siis oleme teinud palju t\u00f6\u00f6d, et viia koodibaas rohkem objektorienteeritud standardile. Lisaks oleme kasutusele v\u00f5tnud mitmeid muid t\u00f6\u00f6riistu, mis v\u00f5imaldavad meil viia oma koodi kaasaegsematele standarditele<\/p>\n<p>N\u00fc\u00fcd, kui oleme selleks aega kulutanud, on aeg h\u00fcpata tagasi koodi juurde ja alustada selle \u00fcmberkujundamist viisil, mis v\u00f5imaldab kasutada <a href=\"https:\/\/wordpress.mediadoma.com\/et\/abstraktsed-klassid-1-osa-abstraktne-kaeitumine\/\" title=\"abstraktseid klasse ja tellijaid (mis toimivad\">abstraktseid klasse ja tellijaid (mis toimivad<\/a> <a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-tegevuskonksude-pohitoed\/\" title=\"s\u00fcndmusep\u00f5hise kujundusmustri\">s\u00fcndmusep\u00f5hise kujundusmustri<\/a> osana ).<\/p>\n<p>Eelmise postituse l\u00f5pus kirjutasin:<\/p>\n<blockquote>\n<p>J\u00e4rgmistes postitustes vaatleme, kuidas saaksime tellijaid saidi avalikul k\u00fcljel (st kus kuvatakse vidina sisu) juurutada. Sama teeme ka saidi haldusalaga.<\/p>\n<\/blockquote>\n<p>Nii et selles postituses teeme t\u00e4pselt seda. T\u00e4psemalt, alustame sellest, et t\u00f6\u00f6tame vidina tellija kallal ja seej\u00e4rel saame esmalt kuvada p\u00f5hividina saidi haldusk\u00fcljel.<\/p>\n<h2>WordPressi vidina katlaplaat: \u00fcmbert\u00f6\u00f6tamine, 8. osa<\/h2>\n<p>P\u00f5hjus, miks ma olen huvitatud peamiselt saidi administratiivsele poolele keskendumisest, on see, et see v\u00f5imaldab meil:<\/p>\n<ul>\n<li>saada aru, kuidas tellijad t\u00f6\u00f6tavad,<\/li>\n<li>vaadake, kuidas koodibaasi tuleb korraldada,<\/li>\n<li>enne serialiseerimisega t\u00f6\u00f6tamist k\u00f5vasti kodeerige teatud teave.<\/li>\n<\/ul>\n<p>Kui see k\u00f5ik on paigas, on meil hea v\u00f5imalus p\u00f6\u00f6rata t\u00e4helepanu keerukamatele asjadele. Nimelt saame tutvustada tellijaid info kuvamiseks haldusalas ning tellijaid andmete desinfitseerimiseks, serialiseerimiseks, hankimiseks, valideerimiseks ja kuvamiseks.<\/p>\n<p>Kuid k\u00f5igepealt teeme vajalikud t\u00f6\u00f6d uue klassi seadistamiseks, automaatlaaduri konfigureerimiseks ja saidi haldusalas sisu kuvamiseks.<\/p>\n<h3>1 Abstraktne tellija<\/h3>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f2e397e634ed2422d4840e6402a59fb9#file-00-abstract-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Vaatame<\/a> esmalt \u00fcle abstraktse tellija, kuna seda rakendavad k\u00f5ik tellijad.<\/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 WordPressWidgetBoilerplateSubscriber;\n\n\/**\n * An abstract implementation of a subscriber that requires a hook and the ability to\n * start the class.\n *\/\nabstract class AbstractSubscriber\n{\n    \/**\n     * @var string a reference to the hook to which the subscriber should be registered\n     *\/\n    protected $hook;\n\n    \/**\n     * @param string $hook the hook to which the subscriber is registered\n     *\/\n    public function __construct(string $hook)\n    {\n        $this-&gt;hook = $hook;\n    }\n\n    \/**\n     * @return string the hook to which the subscriber is registered\n     *\/\n    public function getHook(): string\n    {\n        return $this-&gt;hook;\n    }\n\n    \/**\n     * Implements the domain logic for the concrete class implementating this subcriber.\n     *\/\n    abstract public function load();\n}\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et sellel on kaks avalikku funktsiooni \u2013 konstruktsioon, mis m\u00e4\u00e4rab konksu ja funktsioon konksu k\u00e4ttesaamiseks. Sellel on ka abstraktne laadimisfunktsioon, kus iga klass, mis seda klassi laiendab, rakendab oma spetsiifilisi funktsioone.<\/p>\n<p>Tuletage meelde, et WordPressi toimingute ja filtrite k\u00e4sitlemise t\u00f5ttu on k\u00f5ik seotud konkreetse konksuga (kas need <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, mille WordPress m\u00e4\u00e4rab,<\/a> v\u00f5i kohandatud konksud).<\/p>\n<h3>2 WordPressi nimeruum<\/h3>\n<p>Kui t\u00f6\u00f6tan WordPressiga tihedalt seotud funktsioonide kallal, proovin veenduda, et paigutan selle WordPressi nimeruumi. See n\u00e4itab nii mulle kui ka teistele arendajatele, et selles nimeruumis asuvat ei saa p\u00f5hirakendusest lahutada.<\/p>\n<p>Nii et looge <strong>src kataloogis<\/strong> <strong>WordPressi<\/strong> kataloog. See on koht, kus asub vidinate p\u00f5hiklass koos k\u00f5igi teiste selle sarja jooksul tutvustatavate klassidega.<\/p>\n<p>See t\u00e4hendab, et me ei vaja enam klassi API kataloogis. Nii et teisaldage klass kindlasti, v\u00e4rskendage selle nimeruumi ja eemaldage kataloog. Mul on selle jaoks ekraanipilt ja kood veidi hiljem.<\/p>\n<p>Lisaks, meenutage seeria varasemaid, paigutasime\u00a0 kataloogi <strong>Views<\/strong> <strong>src<\/strong> kataloogi juure, kuid n\u00fc\u00fcd saame selle teisaldada <strong>WordPressi<\/strong> kataloogi. Nii et j\u00e4tkake ja tehke seda kohe.<\/p>\n<p>L\u00f5pptulemus peaks v\u00e4lja n\u00e4gema umbes selline:<\/p>\n<p>N\u00fc\u00fcd saame p\u00f6\u00f6rata t\u00e4helepanu koodile.<\/p>\n<h3>3 Pilk vidinaklassile<\/h3>\n<p>Selles postituses lihtsustame veidi p\u00f5hividinate klassi. See t\u00fchistab osa t\u00f6\u00f6st, mida oleme teinud, kuid vajasime seda eelnevat t\u00f6\u00f6d, et j\u00f5uda selleni.<\/p>\n<p>Praegu keskendume konstruktorile ja vidina n\u00e4lkja toomise funktsioonile. See v\u00f5imaldab meil l\u00f5puks WordPressi haldusalas midagi n\u00e4ha.<\/p>\n<p>Nii et k\u00f5igepealt veenduge, et teie vidinaklass n\u00e4eb v\u00e4lja <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f2e397e634ed2422d4840e6402a59fb9#file-01-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/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\nuse WP_Widget;\n\nclass Widget extends WP_Widget\n{\n    \/**\n     * @var string unique identifier for your widget\n     *\/\n    protected $widgetSlug;\n\n    \/**\n     * Initializes the plugin by setting its properties and calling the parent class with the description.\n     *\n     * @param mixed $widgetSlug\n     *\/\n    public function __construct($widgetSlug)\n    {\n        $this-&gt;widgetSlug = $widgetSlug;\n\n        parent::__construct(\n            $this-&gt;getWidgetSlug(),\n            __('Widget Name', $this-&gt;getWidgetSlug()),\n            [\n                'classname' =&gt; $this-&gt;getWidgetSlug().'-class',\n                'description' =&gt; __('Short description of the widget goes here.', $this-&gt;getWidgetSlug()),\n            ]\n        );\n    }\n\n    \/**\n     * Return the widget slug.\n     *\n     * @return string slug variable\n     *\/\n    public function getWidgetSlug()\n    {\n        return $this-&gt;widgetSlug;\n    }\n}<\/code><\/pre>\n<p>J\u00e4rgmiseks, kuna teisaldasime selle faili <strong>WordPressi<\/strong> nimeruumi, peame v\u00e4rskendama <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f2e397e634ed2422d4840e6402a59fb9#file-02-composer-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">oma helilooja konfiguratsioonifaili<\/a> automaatse laadimise jaotist :<\/p>\n<pre><code>\"autoload\": {\n    \"psr-4\": {\n        \"WordPressWidgetBoilerplate\": \"src\/\",\n        \"WordPressWidgetBoilerplateUtilities\": \"src\/Utilities\/\",\n        \"WordPressWidgetBoilerplateSubscriber\": \"src\/Subscriber\/\",\n        \"WordPressWidgetBoilerplateWordPress\": \"src\/WordPress\/\"\n    }\n},<\/code><\/pre>\n<p>J\u00e4rgmisena peame tutvustama tellijat.<\/p>\n<h3>4 Vidina tellija tutvustus<\/h3>\n<p>Kui mul on mingisugune p\u00f5hiklass, p\u00fc\u00fcan \u00fcldiselt luua lihtsa abonendi, mis loob p\u00f5hiklassi ja v\u00f5imaldab sellel oma t\u00f6\u00f6d teha.<\/p>\n<p>Teen seda seet\u00f5ttu, et WordPress, nagu mainitud, kasutab s\u00fcndmustep\u00f5hist kujundusmustrit, mis t\u00e4hendab, et k\u00f5ik tuleb registreerida teatud t\u00fc\u00fcpi konksu k\u00fclge. Ja mulle ei meeldi segada domeeniloogikat sama klassiga, mis haakub WordPressiga. Nii et ma eraldan nad.<\/p>\n<p>Ja seda tellija teeb. See registreerib end WordPressis ja kutsub seej\u00e4rel klassi, kes vastutab t\u00f6\u00f6 tegeliku tegemise eest.<\/p>\n<p>Seda \u00f6eldes p\u00f6\u00f6rake t\u00e4helepanu <strong>tellijate<\/strong> kataloogile ja lisage klass nimega <strong>WidgetSubscriber<\/strong>. Selles klassis <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f2e397e634ed2422d4840e6402a59fb9#file-03-widget-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lisage j\u00e4rgmine kood<\/a> :<a href=\"https:\/\/gist.github.com\/tommcfarlin\/f2e397e634ed2422d4840e6402a59fb9#file-03-widget-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<pre><code>&lt;?php\n\n&lt;?php\n\nnamespace WordPressWidgetBoilerplateSubscriber;\n\nuse WordPressWidgetBoilerplateWordPressWidget;\n\n\/**\n * Initializes the core Widget class that's used by WordPress to instantiate the widget,\n * renders the administrative area, provide serialization functionality, and displays the\n * public-facing view.\n *\/\nclass WidgetSubscriber extends AbstractSubscriber\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct(string $hook)\n    {\n        parent::__construct($hook);\n    }\n\n    \/**\n     * Registers the core Widget class using the WordPress APIs.\n     *\/\n    public function load()\n    {\n        register_widget(new Widget('widget-name'));\n    }\n}\n<\/code><\/pre>\n<p>Konstruktor registreerib klassi konkreetse konksuga, mille vaatame hetke p\u00e4rast \u00fcle; siis kasutab see meie vidina loomiseks WordPressi API-d (mis toimub <strong>laadimisfunktsioonis<\/strong> ).<\/p>\n<h3>5 Bootstrap<\/h3>\n<p>L\u00f5puks peame v\u00e4rskendama alglaadimist, et see:<\/p>\n<ul>\n<li>registreerib <strong>WidgetSubscriberi<\/strong> \u00f5ige konksuga,<\/li>\n<li>lisab abonendi <strong>registrisse<\/strong> ,<\/li>\n<li>ja k\u00e4ivitab pistikprogrammi (mida oleme teinud).<\/li>\n<\/ul>\n<p>P\u00e4rast k\u00f5ike seda peaks buutstrap v\u00e4lja n\u00e4gema <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f2e397e634ed2422d4840e6402a59fb9#file-04-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmine<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace WordPressWidgetBoilerplate;\n\nuse WordPressWidgetBoilerplateUtilitiesRegistry;\nuse WordPressWidgetBoilerplatePlugin;\nuse WordPressWidgetBoilerplateSubscriberWidgetSubscriber;\n\n\/\/ Prevent this file from being called directly.\ndefined('WPINC') || die;\n\n\/\/ Include the autoloader.\nrequire_once __DIR__. '\/vendor\/autoload.php';\n\n\/\/ Setup a filter so we can retrieve the registry throughout the plugin.\n$registry = new Registry();\nadd_filter('wpwBoilerplateRegistry', function() use ($registry) {\n    return $registry;\n});\n\n\/\/ Add the Widget base class to the Registry.\n$registry-&gt;add('widgetSubscriber', new WidgetSubscriber('widgets_init'));\n\n\/\/ Start the machine.\n(new Plugin($registry))-&gt;start();<\/code><\/pre>\n<p>J\u00e4rgmisena peaksite saama WordPressi sisse logida ja pistikprogrammi aktiveerida.<\/p>\n<h2>Pilk haldusalale<\/h2>\n<p>Praegu pole palju vaadata, kuid me j\u00f5uame selleni. Esiteks peaksite m\u00e4rkama, et vidin ilmub n\u00fc\u00fcd saadaolevaid vidinaid sisaldavas piirkonnas:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160941-61e7175c46bcc.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-160941-61e7175c46bcc.png\" alt=\"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 8. osa\"><\/a><\/p>\n<p>Samuti peaksite n\u00e4gema, et kui lohistate vidina vidinatega varustatud alale (v\u00f5i mis tahes k\u00fclgribale), pole sellel valikuid.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160941-61e7175f91557.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-160941-61e7175f91557.png\" alt=\"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 8. osa\"><\/a><\/p>\n<p>Sellegipoolest oleme heas kohas, et j\u00e4tkata olemasolevale tuginedes. Saate alati <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/develop\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GitHubis<\/a> j\u00e4tkata katlaplaadi arengu j\u00e4lgimist .<\/p>\n<h2>J\u00e4tkub<\/h2>\n<p>J\u00e4rgmisena j\u00e4tkame vidina haldusala funktsionaalsuse v\u00e4ljat\u00f6\u00f6tamist. P\u00e4rast seda p\u00f6\u00f6rame t\u00e4helepanu nii vidina avalikkusele kui ka serialiseerimisfunktsioonile.<\/p>\n<p>Peaksite n\u00e4gema, kuidas asjad hakkavad kujunema, kui hakkame loogikat selle erinevateks komponentideks eraldama. Kui ei, siis \u00e4rge muretsege \u2013 tulemas on veel palju.<\/p>\n<p>Ja Boilerplate&#8217;i l\u00f5plik versioon demonstreerib loomulikult k\u00f5iki p\u00f5him\u00f5tteid, millele me selle postituste seeria jooksul tugineme.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alustame haldusalast alustades erinevate WordPressi vidinate koostamisel kasutatavate komponentide eraldamist.<\/p>\n","protected":false},"author":1,"featured_media":234945,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,842,863],"tags":[1165],"class_list":["post-230824","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230824","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=230824"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230824\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/234945"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230824"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}