{"id":233744,"date":"2023-02-21T13:48:00","date_gmt":"2023-02-21T10:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233744"},"modified":"2022-11-11T12:09:34","modified_gmt":"2022-11-11T09:09:34","slug":"opetus-kohandatud-url-i-lopp-punktid-wordpressi-uemberkirjutamise-api-ga","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/opetus-kohandatud-url-i-lopp-punktid-wordpressi-uemberkirjutamise-api-ga\/","title":{"rendered":"\u00d5petus: kohandatud URL-i l\u00f5pp-punktid WordPressi \u00fcmberkirjutamise API-ga"},"content":{"rendered":"\n<p>Kas olete kunagi soovinud, et saaksite \u00fcksikuid postitusi, lehti v\u00f5i kohandatud postitust\u00fc\u00fcpe laiendada kohandatud malliga, mis s\u00e4ilitab oma URL-i struktuuri? WordPress <a href=\"https:\/\/codex.wordpress.org\/Rewrite_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Rewrite API abil<\/a> on see t\u00e4iesti v\u00f5imalik ja pole \u00fcldse keeruline.<\/p>\n<p>Selles \u00f5petuses vaatleme, kuidas lisada \u00fche kohandatud postituse t\u00fc\u00fcbi vaade teise n\u00e4lkjale, mis laadib erineva malli. Teisis\u00f5nu, kui \u00fche kohandatud postituse t\u00fc\u00fcpi postituse URL on &quot;example.com\/destination\/venice\/&quot;, saate lisada URL-i reeglid eraldi lehtede jaoks, mis sisaldavad igale sihtkohale seotud teavet, n\u00e4iteks &quot;example.com\/destination\/venice&quot;. \/activities\/&quot; ja \u201eexample.com\/destination\/venice\/attractions\/&#8221;.<\/p>\n<p>Kui olete huvitatud sellest, kuidas WooCommerce&#8217;i lehele &quot;Minu konto&quot; l\u00f5pp-punkte lisada, on mul veel <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-add-custom-endpoints-to-my-account-page-in-woocommerce\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00fcks postitus<\/a> just selle kohta!<\/p>\n<p>WordPressi \u00fcmberkirjutamise API-l on palju kasulikke funktsioone oma kohandatud URL-i reeglite kirjutamiseks. V\u00f5ib-olla olete n\u00e4inud k\u00f5ige tuntumat ja laiemat funktsiooni; <code>add_rewrite_rule()<\/code>. See \u00f5petus kasutab aga sarnast <code>add_rewrite_endpoint()<\/code>, mis on v\u00e4ga kasulik URL-i l\u00f5pp-punktide lisamiseks (p\u00f5him\u00f5tteliselt kohandatud URL-i n\u00e4pun\u00e4idete lisamine p\u00e4rast midagi, mis on juba olemas, nt p\u00e4rast \u00fche postituse v\u00f5i \u00fcksiku kategooria l\u00f5ppu). Kasutades saate saavutada sama tulemuse, <code>add_rewrite_rule()<\/code>kuid l\u00f5pp-punktide lisamise protsess on lihtsam.<\/p>\n<h2>Mida me teeme<\/h2>\n<p>See juhend eeldab, et oleme loonud kaks kohandatud postitust\u00fc\u00fcpi; &quot;film&quot; ja &quot;n\u00e4itleja&quot;. \u00dche filmi p\u00fcsilingi reegel on \u201eexample.com\/movie\/fight-club\/&#8221; ja \u00fche n\u00e4itleja puhul \u201eexample.com\/actor\/brad-pitt\/&#8221;. Soovime iga filmi jaoks eraldi lehte, mis n\u00e4itab k\u00f5iki selle filmi n\u00e4itlejaid, mis asub aadressil \u201eexample.com\/movie\/fight-club\/actors\/&#8221;, ja samamoodi eraldi lehte iga n\u00e4itleja jaoks, mis n\u00e4itab k\u00f5iki filme, milles n\u00e4itleja on osalenud. asub aadressil &quot;example.com\/actor\/brad-pitt\/movies\/&quot;.<\/p>\n<p>Ma ei hakka \u00fcksikasjalikult kirjeldama, kuidas neid kahte kohandatud postitust\u00fc\u00fcpi lisada; Kui vajate selle osa tegemisel abi, soovitan lugeda minu postitust <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-post-types-and-custom-taxonomies\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kohandatud postitust\u00fc\u00fcpide lisamise<\/a> kohta .<\/p>\n<h2>Koodi kirjutamine<\/h2>\n<p>Esimene samm on <code>add_rewrite_endpoint()<\/code>funktsiooni kutsumine, millega on \u00fchendatud <code>init<\/code>(tavaliselt on k\u00f5ik \u00fcmberkirjutamise API funktsioonid \u00fchendatud <code>init<\/code>). meie kahe soovitud l\u00f5pp-punkti registreerimiseks; &#8216;filmid&#8217; ja &#8216;n\u00e4itlejad&#8217;. Funktsioon <a href=\"https:\/\/codex.wordpress.org\/Rewrite_API\/add_rewrite_endpoint\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00f5tab<\/a> kaks argumenti; esiteks soovitud l\u00f5pp-punkt (nt &#8216;filmid&#8217;) ja teiseks konstant, kus l\u00f5pp-punkt peaks &quot;elama&quot; (nt lehek\u00fcljed, autor, arhiivid jne). Vaadake dokumentatsiooni, milliste konstantide jaoks saate kasutada; selle n\u00e4ite puhul on \u00fcldine <code>EP_PERMALINK<\/code>hea:<\/p>\n<pre><code>add_action('init', function() {\n    add_rewrite_endpoint('movies', EP_PERMALINK);\n    add_rewrite_endpoint('actors', EP_PERMALINK);\n});<\/code><\/pre>\n<p>NB! Kui teie kohandatud postituse t\u00fc\u00fcp on hierarhiline, mis t\u00e4hendab, et see sisaldab <code>'hierarchical' =&gt; true<\/code>, <code>register_post_type()<\/code>peate konstandi v\u00e4lja l\u00fclitama <code>EP_PERMALINK<\/code>nupuga <code>EP_PAGES<\/code>.<\/p>\n<p>P\u00e4rast selle koodi salvestamist peate avama Seaded &gt; P\u00fcsilingid ja kl\u00f5psama p\u00fcsilinkide v\u00e4rskendamiseks lihtsalt nuppu Salvesta. Iga kord, kui lisate v\u00f5i muudate \u00fcmberkirjutusreeglit, peate selle toimimiseks v\u00e4rskendama oma p\u00fcsilinke!<\/p>\n<h3>P\u00e4ringu k\u00e4sitlemine vars<\/h3>\n<p>Teema v\u00f5i pistikprogrammi arendajana saate aru saada, kas n\u00e4idata nende l\u00f5pp-punktide malle v\u00f5i mitte, kontrollides \u201ep\u00e4ringu varieerumine&#8221;; p\u00f5him\u00f5tteliselt WordPressi globaalne p\u00e4ringuobjekt. Teeme seda kutsudes <code>get_query_var()<\/code>p\u00e4ringu argumendiks (&quot;filmid&quot; v\u00f5i &quot;n\u00e4itlejad&quot;).<\/p>\n<p>Kui olete varem <code>add_rewrite_rule()<\/code>v\u00f5i <code>get_query_var()<\/code>varem t\u00f6\u00f6tanud, v\u00f5ite juba olla teadlik, et WordPress ei lisa automaatselt kohandatud p\u00e4ringu varie. Tavaliselt peate <code>query_vars<\/code>oma kohandatud muutujad filtreerima ja lisama, et WordPress neid asustada. Kuid <code>add_rewrite_endpoint()<\/code>teeb seda meie eest automaatselt.<\/p>\n<p>Kui aga proovime helistada <code>get_query_var('movies')<\/code>, ei paista see kunagi m\u00e4\u00e4ratud olevat. Selle p\u00f5hjuseks on asjaolu, et see eeldab, et selle seadmiseks peab sellel olema v\u00e4\u00e4rtus. L\u00f5pp-punkti reeglid eeldavad, et v\u00e4\u00e4rtus, mis tuleb p\u00e4rast l\u00f5pp-punkti, on v\u00e4\u00e4rtus. N\u00e4iteks &quot;example.com\/actor\/brad-pitt\/movies\/some-value\/&quot; toimiks, kuna sellel lehel <code>get_query_var('movies')<\/code>tagastaks v\u00e4\u00e4rtuse &quot;some-value&quot;. Kuid see pole see, mida me tahame, me tahame, et see t\u00f6\u00f6taks ainult \u00fche l\u00f5pp-punktiga. Selle lahendamiseks peame haakima WordPressi <code>request<\/code>filtriga ja teavitama WordPressi, et kui oleme oma l\u00f5pp-punktides, peaksid p\u00e4ringu vars lisama l\u00f5pp-punkti m\u00f5ne v\u00e4\u00e4rtusega (seadsime selle lihtsalt v\u00e4\u00e4rtuseks <code>true<\/code>).<\/p>\n<pre><code>add_filter('request', function($vars) {\n    if (isset($vars['movies'])) {\n        $vars['movies'] = true;\n    }\n    if (isset($vars['actors'])) {\n        $vars['actors'] = true;\n    }\n    return $vars;\n});<\/code><\/pre>\n<p>Kui proovite n\u00fc\u00fcd kasutada <code>get_query_vars('movies')<\/code>saidil \u201eexample.com\/actor\/brad-pitt\/movies\/&#8221; v\u00e4\u00e4rtust <code>true<\/code>(oluline on see, et see on tegelikult m\u00e4\u00e4ratud).<\/p>\n<h3>Malli laadimine<\/h3>\n<p>J\u00e4rgmine samm on otsustada, mis peaks nende kahe l\u00f5pp-punktiga juhtuma; v\u00f5i teisis\u00f5nu, milliseid malle soovite laadida. See osa on teie otsustada, v\u00f5ite selle k\u00fclge haakida, <code>template_redirect<\/code>kuid see on t\u00f5esti soovitatav ainult siis, kui soovite teha tegelikku \u00fcmbersuunamist. Soovitan haakuda <code>template_include<\/code>filtriga ja lihtsalt \u00f6elda WordPressile, milliseid malle kasutada, kui oleme kohandatud l\u00f5pp-punktides. Oletame, et teemal on PHP mallid <code>single-actor-movies.php<\/code>&quot;example.com\/actor\/\/movies\/&quot; ja <code>single-movie-actors.php<\/code>&quot;example.com\/movie\/\/actors\/&quot; jaoks.<\/p>\n<pre><code>add_filter('template_include', function($template) {\n    if (is_singular() &amp;&amp; get_query_var('movies')) {\n        $post = get_queried_object();\n        return locate_template(['single-actor-movies.php']);\n    }\n    if (is_singular() &amp;&amp; get_query_var('actors')) {\n        $post = get_queried_object();\n        return locate_template(['single-movie-actors.php']);\n    }\n    return $template;\n});<\/code><\/pre>\n<p>Kui see filter on paigas, peaks WordPress laadima meie kohandatud l\u00f5pp-punktide jaoks pakutavad mallid ja nende mallide sees <code>$post<\/code>oleks globaalne objekt enne l\u00f5pp-punkti seotud \u00fcksikpostituse objekt \u2013 nt \u00fche toimija postitusobjekt, kui oleme k\u00f5igi kuvamise malli juures. filmides, milles n\u00e4itleja on esinenud. Nii on meil lihtne esitada p\u00e4ringuid teabe kohta, mida tahame n\u00e4idata.<\/p>\n<h2>URL-i hankimine l\u00f5pp-punktini<\/h2>\n<p>Meie kohandatud l\u00f5pp-punktide ja lehtede olemasolu on hea ja tore, kuid kuhugi peaksite need linkima. N\u00e4iteks soovite \u00fche filmi mallis linki &quot;Kuva k\u00f5iki n\u00e4itlejaid&quot;, mis viib teie l\u00f5pp-punkti.<\/p>\n<p>Kahjuks pole selle jaoks nii lihtsat WordPressi funktsiooni. Peate URL-i ise looma. Soovitan kasutada <code>[get_site_url](https:\/\/developer.wordpress.org\/reference\/functions\/get_site_url\/)()<\/code>saidi\u00fcleste l\u00f5pp-punktide jaoks v\u00f5i \u00fclaltoodud juhul viidata konkreetsele postitusele <code>[get_the_permalink](https:\/\/developer.wordpress.org\/reference\/functions\/get_the_permalink\/)()<\/code>(kas ts\u00fckli sees v\u00f5i sisestades postituse ID) ja lisada l\u00f5pp-punkt selle j\u00e4rele, n\u00e4iteks:<\/p>\n<pre><code>echo get_the_permalink(). '\/actors';<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>See \u00f5petus n\u00e4itab, kuidas laiendada kohandatud postituse t\u00fc\u00fcpi kohandatud malliga, mis s\u00e4ilitab oma URL-i struktuuri, kasutades WordPress Rewrite API-t.<\/p>\n","protected":false},"author":1,"featured_media":152349,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,718,833,894,1110,842,833,842,863,863],"tags":[1165],"class_list":{"0":"post-233744","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-arendaja","8":"category-kood","10":"category-juhend-algajatele","12":"category-n-a","13":"category-opetused","16":"category-wordpress-4","18":"tag-affiai-et"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233744","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=233744"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/152349"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}