{"id":230214,"date":"2022-12-05T13:21:00","date_gmt":"2022-12-05T10:21:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230214"},"modified":"2022-11-09T20:37:58","modified_gmt":"2022-11-09T17:37:58","slug":"wordpressi-tegevuskonksude-pohitoed","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-tegevuskonksude-pohitoed\/","title":{"rendered":"WordPressi tegevuskonksude p\u00f5hit\u00f5ed"},"content":{"rendered":"\n<p>Alati, kui kunagi hakkab arenenuma programmeerimisega tegelema \u2013 olgu see siis WordPressis v\u00f5i m\u00f5nes muus raamistikus, raamatukogus, sihtasutuses v\u00f5i programmeerimiskeeles \u2013 on aegu, mil uutest kontseptsioonidest v\u00f5ib sageli olla raskem aru saada kui teistest.<\/p>\n<p>\u00dcldiselt olen leidnud, et see on t\u00f5si alati, kui inimene on \u00f5ppinud n\u00e4iteks objektorienteeritud programmeerimise p\u00f5hit\u00f5desid, kuid pole kokku puutunud teatud asjade, n\u00e4iteks disainimustrite n\u00fcanssidega.<\/p>\n<p>N\u00e4ide: olen kirjutanud <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00fcndmustep\u00f5hisest kujundusmustrist<\/a><\/strong> (v\u00f5i <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">avaldamisest-tellimisest<\/a><\/strong> v\u00f5i pubist\/subist, nagu m\u00f5nele meeldib sellele viidata) <strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">teistes postitustes.<\/a><\/strong><\/p>\n<p>Jah, iga\u00fchel on teatud erinevused, kuid \u00fcldine idee on see, et midagi juhtub ja s\u00fcndmus t\u00f5statatakse ning k\u00f5ik, kes seda s\u00fcndmust kuulavad v\u00f5i selle s\u00fcndmuse tellijad, reageerivad.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466947738.jpg\" 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-162881-61e7466947738.jpg\" alt=\"WordPressi tegevuskonksude p\u00f5hit\u00f5ed\" ><\/a><\/p>\n<p>Claus Gr\u00fcnst\u00e4udli foto saidil Unsplash<\/p>\n<p>See on WordPressi peamine muster, mis v\u00f5imaldab meil s\u00f5na otseses m\u00f5ttes teatud t\u00e4itmispunktidesse haakuda. \u00dcldiselt v\u00f5ime neid WordPressis k\u00e4sitada tegevuskonksudena.<\/p>\n<p>Igatahes teeb rakendus meile teatud punktid k\u00e4ttesaadavaks, et saaksime oma funktsioone lisada. Kui see funktsioon on registreeritud, lahkub WordPress oma koodibaasist, h\u00fcppab meie omasse ja naaseb seej\u00e4rel meie omasse.<\/p>\n<p>Seda on piisavalt lihtne m\u00f5ista, kuid mis siis, kui soovite oma koodis paljastada alasid, mis v\u00f5imaldavad teistel teie koodiga haakida?<\/p>\n<h2>Tegevuskonksud WordPressis<\/h2>\n<p>Enne kui vaatate, kuidas WordPress neid mustreid rakendab, on oluline m\u00f5ista selle mustri p\u00f5hit\u00f5desid. Kuigi see pole kaugeltki k\u00f5ikeh\u00f5lmav, on see m\u00f5eldud mustri p\u00f5him\u00f5istmiseks, et oleks v\u00f5imalik lugeda ja kirjutada WordPressi-keskset koodi.<\/p>\n<p>Niisiis, kuidas oleks hea Pubi\/Sub-mustrist m\u00f5elda? <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Wikipedia m\u00e4\u00e4ratleb selle j\u00e4rgmiselt:<\/a><\/strong><\/p>\n<blockquote>\n<p>Tarkvaraarhitektuuris on publish-subscribe s\u00f5numside muster, kus s\u00f5numite saatjad, mida nimetatakse avaldajateks, ei programmeeri s\u00f5numeid otse konkreetsetele vastuv\u00f5tjatele, mida nimetatakse tellijateks, saatmiseks, vaid liigitavad avaldatud s\u00f5numid klassidesse, teadmata, millised tellijad, kui neid on., v\u00f5ib olla. Samamoodi v\u00e4ljendavad tellijad huvi \u00fche v\u00f5i mitme klassi vastu ja saavad ainult huvipakkuvaid s\u00f5numeid, teadmata, millised v\u00e4ljaandjad on olemas.<\/p>\n<\/blockquote>\n<h3>Mustri m\u00f5istmine<\/h3>\n<p>Seda v\u00f5ib alguses palju arvesse v\u00f5tta. Ma ei tea, aga v\u00f5tame selle lahti:<\/p>\n<ol>\n<li>On olemas teenus, meie puhul WordPress, mis vastutab s\u00f5numite avaldamise eest k\u00f5igile, kes on tellinud (see ei pruugi teada, kes kuulab).<\/li>\n<li>Kui tellija kuulab, tegutseb ta seda toimingut kuuldes.<\/li>\n<li>Kui abonendi kood on k\u00e4ivitatud, naaseb programm algsesse t\u00e4itmispunkti (see on koht, kuhu kirjastaja s\u00f5numi saatis).<\/li>\n<\/ol>\n<p>Sellel on n\u00fcansse, nagu as\u00fcnkroonne funktsionaalsus ja muud sellised asjad, kuid see on rohkem arenenud, kui ma selles konkreetses postituses eelistaksin. L\u00f5ppude l\u00f5puks on selle eesm\u00e4rk panna alus funktsionaalsuse m\u00f5istmisele ja rakendamisele.<\/p>\n<p>As\u00fcnkroonne funktsionaalsus v\u00f5ib sattuda l\u00f5imestamise v\u00f5i Ajaxi kaudu, need on olulised teemad, see pole see postitus.<\/p>\n<h3>Kuidas see WordPressis v\u00e4lja n\u00e4eb?<\/h3>\n<p>V\u00f5ib-olla on lihtsaim viis selle konkreetse mustri kirjeldamiseks WordPressis funktsioonikutsete kasutamine:<\/p>\n<ul>\n<li>do_action<\/li>\n<li>add_action<\/li>\n<\/ul>\n<p>M\u00f5nikord v\u00f5ib nomenklatuur olla segadusttekitav, kuid lihtsalt \u00f6eldes: <strong>do_action<\/strong> avaldab ja s\u00fcndmuse ning <strong>lisab<\/strong> s\u00fcndmusele_actioni tellijaid. V\u00f5i v\u00f5ib-olla parem viis sellest m\u00f5elda on<strong>:<\/strong><\/p>\n<p>do_action k\u00e4sib WordPressil teha k\u00f5ik lisatud toimingud.<\/p>\n<p>M\u00f5nikord on abiks lihtsad fraasid, millega asjad toimivad. Ma ei tea, kas \u00fclaltoodu on k\u00f5ige tabavam v\u00f5i meeldej\u00e4\u00e4vam fraas, aga see on midagi, eks?<\/p>\n<p>Lisaks pange t\u00e4hele, et <strong>do_action<\/strong> ja <strong>add_action<\/strong> on asjad, mis on WordPressi p\u00f5hielemendid ja on saadaval ka meie arenduse jaoks. Enne kui l\u00e4heme edasi, vaatame, mida iga\u00fcks neist t\u00e4hendab:<\/p>\n<p>Do_action <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jaoks<\/a> :<\/p>\n<blockquote>\n<p>See funktsioon k\u00e4ivitab k\u00f5ik tegevuskonksuga seotud funktsioonid <code>$tag<\/code>. <code>$tag<\/code>Uusi tegevuskonkse on v\u00f5imalik luua lihtsalt selle funktsiooni kutsumisega, m\u00e4\u00e4rates parameetri abil uue konksu nime .<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466d56bdd.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-162881-61e7466d56bdd.png\" alt=\"WordPressi tegevuskonksude p\u00f5hit\u00f5ed\" ><\/a><\/p>\n<p>V\u00f5i veelgi lihtsamalt \u00f6eldes:<\/p>\n<blockquote>\n<p>T\u00e4itke funktsioone, mis on \u00fchendatud konkreetse tegevuskonksuga.<\/p>\n<\/blockquote>\n<p>Konksudele viidates v\u00f5ivad need olla kas <strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressi m\u00e4\u00e4ratletud konksud<\/a><\/strong> v\u00f5i kohandatud konksud, mille m\u00e4\u00e4rate oma teemas v\u00f5i pistikprogrammis.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467368f0b.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-162881-61e7467368f0b.png\" alt=\"WordPressi tegevuskonksude p\u00f5hit\u00f5ed\" ><\/a><\/p>\n<p>Mis puutub <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_actioni<\/a> :<\/p>\n<blockquote>\n<p>Toimingud on konksud, mille WordPressi tuum k\u00e4ivitab teatud punktides t\u00e4itmise ajal v\u00f5i konkreetsete s\u00fcndmuste toimumisel. Pluginad saavad Action API abil m\u00e4\u00e4rata, et nendes punktides k\u00e4ivitatakse \u00fcks v\u00f5i mitu selle PHP funktsiooni.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467888f17.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-162881-61e7467888f17.png\" alt=\"WordPressi tegevuskonksude p\u00f5hit\u00f5ed\" ><\/a><\/p>\n<p>Ja sarnaselt lihtsamalt \u00f6eldes:<\/p>\n<blockquote>\n<p>Seob funktsiooni konkreetse toimingu k\u00fclge.<\/p>\n<\/blockquote>\n<p>Selle seadistamine praktiliselt on veidi erinev, sest me kasutame tavaliselt WordPressi oma koodi lisamiseks <strong>add_actionit .<\/strong><\/p>\n<h3>Praktiline n\u00e4ide<\/h3>\n<p>N\u00e4iteks v\u00f5ib-olla olete kirjutanud midagi <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/035b213bd632d2ab9fc4a79acffa1342\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sellist:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\nadd_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');\n\/**\n * Processes the permalink so we can remove any characters that may cause a problem when communicating\n * with the API.\n *\n * @param  array $data The array of information about the post.\n * @return array $data The data without the malformed information in the post name for the URL.\n *\/\npublic function processPermalink($data)\n{\n    if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {\n        $data['post_name'] =\n            preg_replace(\n                '\/(%ef%b8%8f|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9)\/',\n                '',\n                $data['post_name']\n            );\n    }\n    return $data;\n}\n<\/code><\/pre>\n<p>Sel juhul on kuskil WordPressi koodibaasis k\u00e4sk <strong>do_action konksu<\/strong> <strong>wp_insert_post_data<\/strong> jaoks ja see aktsepteerib funktsiooni ja edastab sellele v\u00e4hemalt \u00fche parameetri.<\/p>\n<h3>Oma konksude lisamine<\/h3>\n<p>Aga mis siis, kui soovite anda teistele arendajatele v\u00f5imaluse teie pistikprogrammi v\u00f5i teema k\u00fclge haakida? Sel juhul peaksite kasutama do_actionit ja selles dokumendis varem lingitud leht pakub k\u00f5ike, mida selle seadistamiseks vajate.<\/p>\n<p>Minu arvates on see tegelikult palju lihtsam kui add_actioniga t\u00f6\u00f6tamine, <strong>sest<\/strong> add_action <strong>v\u00f5imaldab<\/strong> mitte ainult siduda olemasoleva v\u00e4ljaandjaga, vaid lisada ka oma kohandatud loogika.<\/p>\n<p><strong>do_action<\/strong> seevastu n\u00f5uab, et esitaksime k\u00e4ivitatava funktsiooni nime ja seej\u00e4rel k\u00e4ivitatavale funktsioonile edastatavate argumentide loendi.<\/p>\n<h2>See on see?<\/h2>\n<p>Umbes nii lihtsalt, kui suudan, jah. Prioriteedi, argumentide arvu ning nimeruumide ja objektorienteeritud programmeerimisega t\u00f6\u00f6tamise osas on m\u00f5ned n\u00fcansid. Kuid j\u00e4llegi, see on v\u00e4ljaspool selle postituse ulatust. V\u00f5ib-olla k\u00e4sitlen seda m\u00f5nes teises postituses p\u00f5hjalikumalt.<\/p>\n<p>Praegu, kui te pole aga tuttav j\u00e4rgmiste p\u00f5hit\u00f5dedega:<\/p>\n<ul>\n<li>pubi\/alammuster,<\/li>\n<li>do_action,<\/li>\n<li>ja add_action<\/li>\n<\/ul>\n<p>Olete n\u00fc\u00fcd piisavalt mugav, et lugeda koodi, millega t\u00f6\u00f6tate, m\u00f5ista, kuidas kood t\u00f6\u00f6tab, ja vajadusel isegi oma lahendusi rakendada.<\/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 toimingukonksude p\u00f5hit\u00f5dede m\u00f5istmine on oluline, kuid enne selle tegemist on oluline \u00e4ra tunda aluseks olev kujundusmuster.<\/p>\n","protected":false},"author":1,"featured_media":162882,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[863],"tags":[1165],"class_list":["post-230214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230214","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=230214"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230214\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/162882"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}