{"id":230249,"date":"2022-12-06T13:33:00","date_gmt":"2022-12-06T10:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230249"},"modified":"2022-11-09T20:48:01","modified_gmt":"2022-11-09T17:48:01","slug":"lihtne-juhend-wordpressi-kesksete-tundide-korraldamiseks","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/lihtne-juhend-wordpressi-kesksete-tundide-korraldamiseks\/","title":{"rendered":"Lihtne juhend WordPressi-kesksete tundide korraldamiseks"},"content":{"rendered":"\n<p>\u00dcks asi, mida olen teinud palju koosk\u00f5lastatumalt, t\u00f5en\u00e4oliselt rohkem kui kunagi varem, on murede eraldamine WordPressiga liidestamise ja probleemse domeeniga t\u00f6\u00f6tamise eest vastutavate klasside vahel.<\/p>\n<p>Oletame n\u00e4iteks, et t\u00f6\u00f6tate pistikprogrammi kallal ja see hakkab suhtlema kolmanda osapoole API-ga. Lisaks pakub see pistikprogramm WordPressi haldusalas ka men\u00fc\u00fcsid, postituste t\u00fc\u00fcpe, taksonoomiat ja nii edasi.<\/p>\n<p>Siin on kaks vastutusvaldkonda:<\/p>\n<ol>\n<li>valdkond, mis vastutab probleemi \u00fcldise lahendamise eest,<\/li>\n<li>WordPressiga liidestamise eest vastutav ala.<\/li>\n<\/ol>\n<p>V\u00f5ite v\u00e4ita, et WordPressiga suhtlevate testpiirkondade \u00fchendamine on oluline, kuid ma tean ka, et need on proovitud ja t\u00f5elised API-d, millel on oma testide komplekt.<\/p>\n<p>Selle asemel peaksime keskenduma \u00fcksuste testimisele ja eraldama oma \u00e4riloogika WordPressist eemale.<\/p>\n<p>Aga see pole selle postituse m\u00f5te. Selle asemel on tegemist pigem viisiga, kuidas projekti potentsiaalselt paika panna, kui osa sellest liidestub WordPressiga.<\/p>\n<p>Olen varasemates postitustes r\u00e4\u00e4kinud nimeruumide t\u00e4htsusest ja eelistest, et ma sellesse arutelusse siin liiga s\u00fcgavalt ei sukelduks.<\/p>\n<p>Selle asemel tahaksin r\u00e4\u00e4kida failide korraldamisest failis\u00fcsteemi ja nimeruumi tasemel, et need oleksid selgelt oma spetsialiseerumisvaldkondadeks eraldatud ja et saaksime olla kindlad, et keskendume n\u00e4iteks oma \u00fcksusetestidele (ja muudele testimine) piirkondades, mis on k\u00f5ige kriitilisemad.<\/p>\n<h3>Abstraheerivad metakastid<\/h3>\n<p>Mulle meeldib veenduda, et mu kataloog ja failistruktuur peegeldavad minu nimeruumide struktuuri. Muidugi, see aitab failide korraldamisel, aga ka kontseptuaalsel korraldusel.<\/p>\n<p>See t\u00e4hendab, et kui ma hakkan t\u00f6\u00f6tama metakastidega, siis tean, et leian t\u00f5en\u00e4oliselt metakastifailid kataloogist, mis on pesastatud <strong>WordPressi<\/strong> emakataloogiga, seej\u00e4rel <strong>administraatori<\/strong> alamkataloogist, millele j\u00e4rgneb <strong>MetaBoxi<\/strong> kataloog.<\/p>\n<p>Kuidas v\u00f5iks sel eesm\u00e4rgil v\u00e4lja n\u00e4ha metakastidega t\u00f6\u00f6tamiseks m\u00f5eldud klasside komplekt, kui peaksime neile korduvkasutatavat koodi kirjutama? Arvestades seda, mida me metakastide kohta teame, teame, et vajame t\u00f5en\u00e4oliselt j\u00e4rgmist.<\/p>\n<ul>\n<li>abstraktne klass, mis m\u00e4\u00e4rab postituse t\u00fc\u00fcbi, millega iga metakast seotakse,<\/li>\n<li>metaboksi kaks funktsiooni \u2013 \u00fcks selle registreerimiseks, teine \u200b\u200bsisu kuvamiseks,<\/li>\n<li>kataloog, mis sisaldab metakasti vaadet v\u00f5i esitlust,<\/li>\n<li>fail, mis toimib nimetatud vaatena.<\/li>\n<\/ul>\n<p>Arvestades \u00fclaltoodud punkte, v\u00f5ib kataloogi struktuur v\u00e4lja n\u00e4ha selline:<\/p>\n<\/p>\n<p>J\u00e4rgmisena on meil kood, mis peegeldab seda struktuuri. See t\u00e4hendab, et meie <strong>WordPressi<\/strong> kataloogis oleks meil alamkataloog <strong>Admin<\/strong>, kuna metakast kuvatakse WordPressi haldusalas, ja meil oleks alamkataloog <strong>Vaade<\/strong>, mis sisaldaks teabe kuvamise eest vastutavat faili.<\/p>\n<p>See j\u00e4tab meile vajaduse luua m\u00f5ned \u00fclaltoodud klassid. V\u00f5ib-olla n\u00e4eks abstraktne baasklass <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2fd7f50706c3f1767dc8b5c2b7deefff#file-00-abstract-metabox-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4lja selline:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeWordPressAdminMetaBox;\n\nabstract class AbstractMetaBox\n{\n    protected $postType;\n\n    public function __construct()\n    {\n        $this-&gt;postType = 'acme_post_type';\n    }\n\n    abstract public function render();\n    abstract public function display();\n}\n<\/code><\/pre>\n<p>Siis laiendaks konkreetne teostus klassi ja see n\u00e4eks <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2fd7f50706c3f1767dc8b5c2b7deefff#file-01-acme-meta-box-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00e4lja j\u00e4rgmine:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeWordPressAdminMetaBox;\n\nclass AcmeMetaBox extends AbstractMetaBox\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function render()\n    {\n        add_meta_box(\n            'acme-product-image',\n            'Product Image',\n            [$this, 'display'],\n            $this-&gt;postType,\n            'side',\n            'default'\n        );\n    }\n\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function display()\n    {\n        include_once plugin_dir_path(__FILE__).'Views\/acme-product-image.php';\n    }\n}\n<\/code><\/pre>\n<p>Ja l\u00f5puks, klassi vaade sisaldaks mis tahes m\u00e4rgistus- ja <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2fd7f50706c3f1767dc8b5c2b7deefff#file-02-acme-product-image-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mallikoodi teabe renderdamiseks<\/a><\/strong> :<\/p>\n<pre><code>&lt;div class=\"product-image-metabox\"&gt;\n    &lt;p&gt;\n        &lt;img src=\"&lt;?= esc_html(get_post_meta(get_the_ID(), 'product_image', true)); ?&gt;\" alt=\"&lt;?= esc_attr(get_the_title()); ?&gt;\" \/&gt;\n        &lt;input type=\"text\" value=\"&lt;?= esc_html(get_post_meta(get_the_ID(), 'product_image', true)); ?&gt;\" \/&gt;\n    &lt;\/p&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>See annab meile t\u00e4pselt selle, mida vajame h\u00e4sti organiseeritud korduvkasutataval viisil, et t\u00f6\u00f6tada metakastidega. Seda saab korrata ka selliste asjade puhul nagu men\u00fc\u00fcd, postituste t\u00fc\u00fcbid, taksonoomiad jne.<\/p>\n<p>Aga ma kaldun k\u00f5rvale.<\/p>\n<h3>M\u00f5ni s\u00f5na \u00fcksuste testimise kohta (koos PHPUnitiga)<\/h3>\n<p>Nagu ma varem postituses mainisin, usun, et meie probleemiruumile ainulaadseid probleeme lahendavad \u00fchikutestimise tunnid on olulised. See t\u00e4hendab, et peate oma PHPUniti konfiguratsioonifailile \u00fctlema, et WordPressi-kesksed failid v\u00e4listaks.<\/p>\n<p>Selle eeliseks, mida ma eespool kirjeldasin, on see, et see muutub triviaalselt lihtsaks. Lihtsamalt \u00f6eldes saate <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2fd7f50706c3f1767dc8b5c2b7deefff#file-03-phpunit-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selle lisada<\/a><\/strong> oma faili <strong>phpunit.xml<\/strong> :<\/p>\n<pre><code>&lt;testsuites&gt;\n  &lt;testsuite name=\"Plugin\"&gt;\n    &lt;directory&gt;.\/tests&lt;\/directory&gt;\n    &lt;exclude&gt;.\/tests\/phpunit&lt;\/exclude&gt;\n    &lt;exclude&gt;.\/src\/WordPress&lt;\/exclude&gt;\n  &lt;\/testsuite&gt;\n&lt;\/testsuites&gt;<\/code><\/pre>\n<p>See annab teile v\u00f5imaluse keskenduda spetsiaalselt oma probleemiruumi jaoks m\u00f5eldud testide kirjutamisele, tagades samal ajal, et kirjutate skaleeritavat, hooldatavat ja taaskasutatavat WordPressi-p\u00f5hist koodi.<\/p>\n<p>Kirjutan praegu e-raamatut (koos mitme muu esmaklassilise sisuga). Kui olete huvitatud, <a href=\"https:\/\/tommcfarlin.com\/registration-info\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vaadake, mida saate<\/a>.<\/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>WordPressi-kesksete klasside koodi organiseerimine aitab meil nii probleemi lahendamise kui ka \u00fchikutestide kirjutamise m\u00f5ttes rohkem oma domeenile keskenduda.<\/p>\n","protected":false},"author":1,"featured_media":236089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718],"tags":[1165],"class_list":["post-230249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230249","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=230249"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230249\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/236089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}