{"id":230040,"date":"2022-11-30T17:32:00","date_gmt":"2022-11-30T14:32:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230040"},"modified":"2022-11-09T19:49:25","modified_gmt":"2022-11-09T16:49:25","slug":"kohandatud-uemberkirjutamise-reeglid-ja-lehemallid-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kohandatud-uemberkirjutamise-reeglid-ja-lehemallid-wordpressis\/","title":{"rendered":"Kohandatud \u00fcmberkirjutamise reeglid ja lehemallid WordPressis"},"content":{"rendered":"\n<p>WordPress <strong><a href=\"https:\/\/codex.wordpress.org\/Rewrite_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Rewrite API<\/a><\/strong> on kindel API eeldusel, et olete regulaaravaldistega rahul.<\/p>\n<p>Ja ausalt, isegi kui te seda ei tee, muudavad sellised t\u00f6\u00f6riistad nagu <strong><a href=\"https:\/\/www.phpliveregex.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP Live RegEx<\/a><\/strong> koodi testimise enne <code>add_rewrite_rule<\/code>API-kutsesse saatmist v\u00e4ga lihtsaks.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163543-61e7543bc96ee.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-163543-61e7543bc96ee.png\" alt=\"Kohandatud \u00fcmberkirjutamise reeglid ja lehemallid WordPressis\" ><\/a><\/p>\n<p>Siiski v\u00f5ite m\u00f5nikord leida end olukorrast, kus peate t\u00f6\u00f6tama \u00fcmberkirjutamise reeglite ja lehemallidega. Ja kui see nii on, pole see alati nii lihtne kui lihtsa k\u00f5ne tegemine \u00fche regulaaravaldise abil.<\/p>\n<p>P\u00f5hjus? Kui teil on mitu lehte, mis kasutavad sama malli, siis ei pruugi leht igal lehel t\u00f6\u00f6tavas p\u00e4ringus alati asuda samas registris.<\/p>\n<p>Selleks peame seda k\u00e4sitlema veidi teistmoodi, kui n\u00e4iteks lihtsalt globaalses p\u00e4ringus teabe numbrilisele indeksile ligi p\u00e4\u00e4sedes.<\/p>\n<h2>Reeglite ja lehemallide \u00fcmberkirjutamine<\/h2>\n<p>Esiteks oletame, et meil on kaks malli (mis ei ole kindlas j\u00e4rjekorras):<\/p>\n<ol>\n<li>mall-alpha.php<\/li>\n<li>template-beta.php<\/li>\n<\/ol>\n<p>Ja siis oletame, et tahame seadistada kohandatud URL-i lehtedele, millest iga\u00fcks kasutab \u00fchte neist mallidest.<\/p>\n<p>See jaguneks j\u00e4rgmisteks sammudeks:<\/p>\n<ol>\n<li>Korrake p\u00e4ringus olevaid postitusi,<\/li>\n<li>Salvestage postitus, kasutades malli vastavas massiivis,<\/li>\n<li>Seadistage \u00fcmberkirjutamise reeglid iga postituse jaoks, millel on antud p\u00e4ring.<\/li>\n<\/ol>\n<p>Selle n\u00e4ite puhul hoian \u00fcmberkirjutamise reeglid \u00fcsna lihtsad. L\u00f5ppude l\u00f5puks v\u00f5ib regulaaravaldiste j\u00e4rgimine olla piisavalt raske, nii et nende j\u00e4rgimine p\u00e4ringuobjekti, mitme massiivi ja reeglite k\u00e4sitlemise ajal v\u00f5ib olla pisut raske.<\/p>\n<p>Seda arvestades on siin n\u00e4idiskood, mis on jagatud \u00fclaltoodud sammude p\u00f5hjal. Postituse l\u00f5pus jagan katkendit, mis koondab k\u00f5ik m\u00f5ne eraldi funktsioonina, et saaksite n\u00e4ha, kuidas see k\u00f5ik kokku sobib.<\/p>\n<p>Seda k\u00f5ike arvesse v\u00f5ttes toimige j\u00e4rgmiselt.<\/p>\n<h3>1 \u00dcmberkirjutamise reeglite lisamine<\/h3>\n<p>Esiteks peame lugema teavet globaalsest WordPressi p\u00e4ringuobjektist, et leida k\u00f5ik lehed, millel on mallid.<\/p>\n<p>Selleks saame lugeda <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d80f687b25281f1ab7c9390cf56d2187#file-00-read-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">globaalse p\u00e4ringuobjekti teabe kohalikku muutujasse<\/a><\/strong>. Nii on lihtne \u00fclej\u00e4\u00e4nud koodist eemalduda, kui pole midagi, millega t\u00f6\u00f6tada.<\/p>\n<pre><code>&lt;?php \n\n$query = $this-&gt;query-&gt;query([\n    'post_type' =&gt; 'page',\n    'meta_key' =&gt; '_wp_page_template',\n    'meta_value' =&gt; ['template-alpha.php', 'template-beta.php'],\n]);\n\nif (!$query) {\n    return;\n}\n\n\/\/ More to come...\n<\/code><\/pre>\n<h3>2 Salvestage asjakohane teave massiivi<\/h3>\n<p>Eeldades, et on lehek\u00fclgi, millel on mallid, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d80f687b25281f1ab7c9390cf56d2187#file-001-store-templated-pages-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">salvestame k\u00f5ik lehed<\/a><\/strong> massiividesse, et saaksime h\u00f5lpsasti hallata nende vastavaid \u00fcmberkirjutusreegleid.<\/p>\n<pre><code>&lt;?php\n\nforeach ($query as $post) {\n    $slug = get_page_template_slug($post-&gt;ID);\n\n    if ('template-alpha.php' === $slug) {\n        $this-&gt;alphaPages[] = $post;\n    }\n\n    if ('template-find-a-camp.php' === $slug) {\n        $this-&gt;betaPages[] = $post;\n    }\n}\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et \u00fclaltoodud osas viitan globaalsele massiivile. Oletame, et see initsialiseeritakse klassi konstruktoris lihtsalt t\u00fchja massiivina.<\/p>\n<h3>3 Seadistage \u00fcmberkirjutamise reeglid<\/h3>\n<p>N\u00fc\u00fcd, kui meil on kaks massiivi \u2013 \u00fcks iga malli ja seda sisaldavate lehtede jaoks \u2013, saame neid korrata ja m\u00e4\u00e4rata igale sellisele lehele \u00fcmberkirjutusreeglid.<\/p>\n<p>Oletame n\u00e4iteks, et \u00fche malli, n\u00e4iteks alfa jaoks, tahame seadistada \u00fcmberkirjutamise reeglid USA ja osariikide jaoks.<\/p>\n<p><code>template-alpha.php<\/code>Siin on <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d80f687b25281f1ab7c9390cf56d2187#file-02-country-state-rules-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kood<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\nadd_rewrite_tag('%country%', '([^&amp;]+)');\nadd_rewrite_tag('%state%', '([^&amp;]+)');\n\nforeach ($this-&gt;alphaPages as $post) {\n    add_rewrite_rule(\n        '^'.$post-&gt;post_name.'\/([^\/]*)\/([^\/]*)\/?',\n        'index.php?page_id='.$post-&gt;ID.'&amp;country=$matches[1]&amp;state=$matches[2]',\n        'top'\n    );\n\n    add_rewrite_rule(\n        '^'.$post-&gt;post_name.'\/([^\/]*)\/?',\n        'index.php?page_id='.$post-&gt;ID.'&amp;country=$matches[1]',\n        'top'\n    );\n}\n<\/code><\/pre>\n<p>Ja <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d80f687b25281f1ab7c9390cf56d2187#file-03-acme-id-rules-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">siin on<\/a><\/strong><code>template-beta.php<\/code> kood :<\/p>\n<pre><code>&lt;?php\n\nadd_rewrite_tag('%acme-id%', '([^&amp;]+)');\n\nforeach ($this-&gt;betaPages as $post) {\n    add_rewrite_rule(\n        '^(.*)?\/([A-Za-z0-9-]+-)(d+)\/?',\n        'index.php?page_id='.$post-&gt;ID.'&amp;acme-id=$matches[3]',\n        'top'\n    );\n}\n<\/code><\/pre>\n<p>Muidugi on \u00fclaltoodud koodis kasutatud regulaaravaldised lihtsalt demonstreerimise eesm\u00e4rgil. Teie raha eest, mida teie projekti jaoks vaja l\u00e4heb.<\/p>\n<h3>4 N\u00fc\u00fcd k\u00f5ik koos<\/h3>\n<p>Oluline on jagada kogu see funktsionaalsus oma meetoditeks, et seda saaks vajadusel h\u00f5lpsasti kapseldada ja testida.<\/p>\n<p>Selleks n\u00e4eb t\u00e4iskood v\u00e4lja j\u00e4rgmine <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d80f687b25281f1ab7c9390cf56d2187#file-04-final-functions-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\npublic function addRewriteRules()\n{\n    $query = $this-&gt;query-&gt;query([\n        'post_type' =&gt; 'page',\n        'meta_key' =&gt; '_wp_page_template',\n        'meta_value' =&gt; ['template-alpha.php', 'template-beta.php'],\n    ]);\n\n    if (!$query) {\n        return;\n    }\n\n    $this-&gt;setPageTypes($query);\n    $this-&gt;setAlphaRewriteRules();\n    $this-&gt;setBetaRewriteRules();\n}\n\nprivate function setPageTypes($query)\n{\n    foreach ($query as $post) {\n        $slug = get_page_template_slug($post-&gt;ID);\n\n        if ('template-alpha.php' === $slug) {\n            $this-&gt;alphaPages[] = $post;\n        }\n\n        if ('template-find-a-camp.php' === $slug) {\n            $this-&gt;betaPages[] = $post;\n        }\n    }\n}\n\nprivate function setAlphaRewriteRules()\n{\n    add_rewrite_tag('%country%', '([^&amp;]+)');\n    add_rewrite_tag('%state%', '([^&amp;]+)');\n\n    foreach ($this-&gt;alphaRules as $post) {\n        add_rewrite_rule(\n            '^'.$post-&gt;post_name.'\/([^\/]*)\/([^\/]*)\/?',\n            'index.php?page_id='.$post-&gt;ID.'&amp;country=$matches[1]&amp;state=$matches[2]',\n            'top'\n        );\n\n        add_rewrite_rule(\n            '^'.$post-&gt;post_name.'\/([^\/]*)\/?',\n            'index.php?page_id='.$post-&gt;ID.'&amp;country=$matches[1]',\n            'top'\n        );\n    }\n}\n\nprivate function setBetaRewriteRules()\n{\n    add_rewrite_tag('%acme-id%', '([^&amp;]+)');\n\n    foreach ($this-&gt;betaPages as $post) {\n        add_rewrite_rule(\n            '^(.*)?\/([A-Za-z0-9-]+-)(d+)\/?',\n            'index.php?page_id='.$post-&gt;ID.'&amp;acme-id=$matches[3]',\n            'top'\n        );\n    }\n}\n<\/code><\/pre>\n<p>Pidage siiski meeles; see p\u00f5hineb lihtsalt selles postituses jagatud demokoodil. Kui t\u00f6\u00f6tate oma projekti kallal, on regulaaravaldised, mallid ja nii edasi erinevad.<\/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>M\u00f5nikord v\u00f5ite leida end olukorrast, kus peate t\u00f6\u00f6tama \u00fcmberkirjutamisreeglite ja lehemallidega.<\/p>\n","protected":false},"author":1,"featured_media":163544,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,842,863],"tags":[1165],"class_list":["post-230040","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230040","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=230040"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230040\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/163544"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}