✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Õpetus: kohandatud URL-i lõpp-punktid WordPressi ümberkirjutamise API-ga

5

Kas olete kunagi soovinud, et saaksite üksikuid postitusi, lehti või kohandatud postitustüüpe laiendada kohandatud malliga, mis säilitab oma URL-i struktuuri? WordPress Rewrite API abil on see täiesti võimalik ja pole üldse keeruline.

Selles õpetuses vaatleme, kuidas lisada ühe kohandatud postituse tüübi vaade teise nälkjale, mis laadib erineva malli. Teisisõnu, kui ühe kohandatud postituse tüüpi postituse URL on "example.com/destination/venice/", saate lisada URL-i reeglid eraldi lehtede jaoks, mis sisaldavad igale sihtkohale seotud teavet, näiteks "example.com/destination/venice". /activities/" ja „example.com/destination/venice/attractions/”.

Kui olete huvitatud sellest, kuidas WooCommerce’i lehele "Minu konto" lõpp-punkte lisada, on mul veel üks postitus just selle kohta!

WordPressi ümberkirjutamise API-l on palju kasulikke funktsioone oma kohandatud URL-i reeglite kirjutamiseks. Võib-olla olete näinud kõige tuntumat ja laiemat funktsiooni; add_rewrite_rule(). See õpetus kasutab aga sarnast add_rewrite_endpoint(), mis on väga kasulik URL-i lõpp-punktide lisamiseks (põhimõtteliselt kohandatud URL-i näpunäidete lisamine pärast midagi, mis on juba olemas, nt pärast ühe postituse või üksiku kategooria lõppu). Kasutades saate saavutada sama tulemuse, add_rewrite_rule()kuid lõpp-punktide lisamise protsess on lihtsam.

Mida me teeme

See juhend eeldab, et oleme loonud kaks kohandatud postitustüüpi; "film" ja "näitleja". Ühe filmi püsilingi reegel on „example.com/movie/fight-club/” ja ühe näitleja puhul „example.com/actor/brad-pitt/”. Soovime iga filmi jaoks eraldi lehte, mis näitab kõiki selle filmi näitlejaid, mis asub aadressil „example.com/movie/fight-club/actors/”, ja samamoodi eraldi lehte iga näitleja jaoks, mis näitab kõiki filme, milles näitleja on osalenud. asub aadressil "example.com/actor/brad-pitt/movies/".

Ma ei hakka üksikasjalikult kirjeldama, kuidas neid kahte kohandatud postitustüüpi lisada; Kui vajate selle osa tegemisel abi, soovitan lugeda minu postitust kohandatud postitustüüpide lisamise kohta .

Koodi kirjutamine

Esimene samm on add_rewrite_endpoint()funktsiooni kutsumine, millega on ühendatud init(tavaliselt on kõik ümberkirjutamise API funktsioonid ühendatud init). meie kahe soovitud lõpp-punkti registreerimiseks; ‘filmid’ ja ‘näitlejad’. Funktsioon võtab kaks argumenti; esiteks soovitud lõpp-punkt (nt ‘filmid’) ja teiseks konstant, kus lõpp-punkt peaks "elama" (nt leheküljed, autor, arhiivid jne). Vaadake dokumentatsiooni, milliste konstantide jaoks saate kasutada; selle näite puhul on üldine EP_PERMALINKhea:

add_action('init', function() { add_rewrite_endpoint('movies', EP_PERMALINK); add_rewrite_endpoint('actors', EP_PERMALINK); });

NB! Kui teie kohandatud postituse tüüp on hierarhiline, mis tähendab, et see sisaldab 'hierarchical' => true, register_post_type()peate konstandi välja lülitama EP_PERMALINKnupuga EP_PAGES.

Pärast selle koodi salvestamist peate avama Seaded > Püsilingid ja klõpsama püsilinkide värskendamiseks lihtsalt nuppu Salvesta. Iga kord, kui lisate või muudate ümberkirjutusreeglit, peate selle toimimiseks värskendama oma püsilinke!

Päringu käsitlemine vars

Teema või pistikprogrammi arendajana saate aru saada, kas näidata nende lõpp-punktide malle või mitte, kontrollides „päringu varieerumine”; põhimõtteliselt WordPressi globaalne päringuobjekt. Teeme seda kutsudes get_query_var()päringu argumendiks ("filmid" või "näitlejad").

Kui olete varem add_rewrite_rule()või get_query_var()varem töötanud, võite juba olla teadlik, et WordPress ei lisa automaatselt kohandatud päringu varie. Tavaliselt peate query_varsoma kohandatud muutujad filtreerima ja lisama, et WordPress neid asustada. Kuid add_rewrite_endpoint()teeb seda meie eest automaatselt.

Kui aga proovime helistada get_query_var('movies'), ei paista see kunagi määratud olevat. Selle põhjuseks on asjaolu, et see eeldab, et selle seadmiseks peab sellel olema väärtus. Lõpp-punkti reeglid eeldavad, et väärtus, mis tuleb pärast lõpp-punkti, on väärtus. Näiteks "example.com/actor/brad-pitt/movies/some-value/" toimiks, kuna sellel lehel get_query_var('movies')tagastaks väärtuse "some-value". Kuid see pole see, mida me tahame, me tahame, et see töötaks ainult ühe lõpp-punktiga. Selle lahendamiseks peame haakima WordPressi requestfiltriga ja teavitama WordPressi, et kui oleme oma lõpp-punktides, peaksid päringu vars lisama lõpp-punkti mõne väärtusega (seadsime selle lihtsalt väärtuseks true).

add_filter('request', function($vars) { if (isset($vars['movies'])) { $vars['movies'] = true; } if (isset($vars['actors'])) { $vars['actors'] = true; } return $vars; });

Kui proovite nüüd kasutada get_query_vars('movies')saidil „example.com/actor/brad-pitt/movies/” väärtust true(oluline on see, et see on tegelikult määratud).

Malli laadimine

Järgmine samm on otsustada, mis peaks nende kahe lõpp-punktiga juhtuma; või teisisõnu, milliseid malle soovite laadida. See osa on teie otsustada, võite selle külge haakida, template_redirectkuid see on tõesti soovitatav ainult siis, kui soovite teha tegelikku ümbersuunamist. Soovitan haakuda template_includefiltriga ja lihtsalt öelda WordPressile, milliseid malle kasutada, kui oleme kohandatud lõpp-punktides. Oletame, et teemal on PHP mallid single-actor-movies.php"example.com/actor//movies/" ja single-movie-actors.php"example.com/movie//actors/" jaoks.

add_filter('template_include', function($template) { if (is_singular() && get_query_var('movies')) { $post = get_queried_object(); return locate_template(['single-actor-movies.php']); } if (is_singular() && get_query_var('actors')) { $post = get_queried_object(); return locate_template(['single-movie-actors.php']); } return $template; });

Kui see filter on paigas, peaks WordPress laadima meie kohandatud lõpp-punktide jaoks pakutavad mallid ja nende mallide sees $postoleks globaalne objekt enne lõpp-punkti seotud üksikpostituse objekt – nt ühe toimija postitusobjekt, kui oleme kõigi kuvamise malli juures. filmides, milles näitleja on esinenud. Nii on meil lihtne esitada päringuid teabe kohta, mida tahame näidata.

URL-i hankimine lõpp-punktini

Meie kohandatud lõpp-punktide ja lehtede olemasolu on hea ja tore, kuid kuhugi peaksite need linkima. Näiteks soovite ühe filmi mallis linki "Kuva kõiki näitlejaid", mis viib teie lõpp-punkti.

Kahjuks pole selle jaoks nii lihtsat WordPressi funktsiooni. Peate URL-i ise looma. Soovitan kasutada [get_site_url](https://developer.wordpress.org/reference/functions/get_site_url/)()saidiüleste lõpp-punktide jaoks või ülaltoodud juhul viidata konkreetsele postitusele [get_the_permalink](https://developer.wordpress.org/reference/functions/get_the_permalink/)()(kas tsükli sees või sisestades postituse ID) ja lisada lõpp-punkt selle järele, näiteks:

echo get_the_permalink(). '/actors';

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem