✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Opetusohjelma: Mukautetut URL-päätepisteet WordPress Rewrite API:lla

5

Oletko koskaan toivonut, että voisit laajentaa yksittäisiä viestejä, sivuja tai mukautettuja viestityyppejäsi mukautetulla mallilla, joka säilyttää oman URL-rakenteensa? WordPress Rewrite API :lla tämä on täysin mahdollista, eikä ollenkaan vaikeaa.

Tässä opetusohjelmassa tarkastelemme, kuinka yhden mukautetun viestityypin näkymä voidaan liittää toiseen etaan, joka lataa eri mallin. Toisin sanoen, jos yksittäisen muokatun viestityyppisen viestin URL-osoite on "example.com/destination/venice/", voit lisätä URL-sääntöjä erillisille sivuille, jotka sisältävät kuhunkin kohteeseen liittyviä tietoja, esimerkiksi"example.com/destination/venice /activities/" ja "example.com/destination/venice/attractions/".

Jos olet kiinnostunut päätepisteiden lisäämisestä WooCommercen "Oma tili” -sivulle, minulla on toinen viesti juuri tästä!

WordPress Rewrite API sisältää runsaasti hyödyllisiä toimintoja omien URL-sääntöjen kirjoittamiseen. Olet ehkä nähnyt tunnetuimman ja laajimman toiminnon; add_rewrite_rule(). Tämä opetusohjelma kuitenkin käyttää samanlaista add_rewrite_endpoint(), joka on erittäin hyödyllinen URL-osoitteiden "päätepisteiden" lisäämiseen (periaatteessa mukautettujen URL-osoitteiden lisäämiseen jo olemassa olevan, esim. yksittäisen viestin tai yksittäisen luokan jälkeen). Voit saavuttaa saman tuloksen käyttämällä, add_rewrite_rule()mutta päätepisteiden lisääminen on yksinkertaisempaa.

Mitä teemme

Tässä oppaassa oletetaan, että olemme luoneet kaksi mukautettua viestityyppiä; "elokuva" ja "näyttelijä". Pysyvän linkin sääntö yksittäiselle elokuvalle on "example.com/movie/fight-club/" ja yksittäiselle näyttelijälle "example.com/actor/brad-pitt/". Haluamme jokaiselle elokuvalle erillisen sivun, joka näyttää kaikki kyseisen elokuvan näyttelijät, osoitteessa "example.com/movie/fight-club/actors/" ja vastaavasti erillisen sivun jokaiselle näyttelijälle, joka näyttää kaikki elokuvat, joissa näyttelijä on esiintynyt. sijaitsee osoitteessa "example.com/actor/brad-pitt/movies/".

En mene yksityiskohtiin näiden kahden mukautetun viestityypin lisäämisestä. Jos tarvitset apua tämän osan tekemisessä, suosittelen lukemaan viestini mukautettujen viestityyppien lisäämisestä.

Koodin kirjoittaminen

Ensimmäinen vaihe on kutsua add_rewrite_endpoint()sisään funktio, joka on koukussa init(yleensä kaikki Rewrite API:n toiminnot on koukussa init). rekisteröidä kaksi haluttua päätepistettämme; "elokuvat" ja "näyttelijät". Funktiolla on kaksi argumenttia; ensinnäkin haluamasi päätepiste (esim. ‘elokuvat’) ja toiseksi vakio, jossa päätepisteen pitäisi "asua" (esim. sivut, tekijä, arkistot jne.). Katso dokumentaatiosta, mihin vakioihin voit käyttää; tässä esimerkissä yleinen EP_PERMALINKon hyvä:

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

HUOM: Jos mukautettu viestityyppisi on hierarkkinen, eli siinä on 'hierarchical' => true, register_post_type()sinun on vaihdettava vakio EP_PERMALINKpainikkeella EP_PAGES.

Kun olet tallentanut tämän koodin, sinun on siirryttävä kohtaan Asetukset > Pysyvät linkit ja napsauttamalla Tallenna-painiketta päivittääksesi pysyvät linkit. Aina kun lisäät tai muokkaat uudelleenkirjoitussääntöä, sinun on päivitettävä pysyvät linkit, jotta se toimisi!

Kyselyn käsittely vars

Tapa, jolla sinä teeman tai laajennuksen kehittäjänä voit selvittää, näytetäänkö näiden päätepisteiden mallit vai ei, on valinta "query vars"; pohjimmiltaan WordPressin globaali kyselyobjekti. Teemme tämän kutsumalla get_query_var()kyselyn argumenttina ("elokuvat" tai "näyttelijät").

Jos olet työskennellyt aiemmin add_rewrite_rule()tai get_query_var()aiemmin, saatat jo tietää, että WordPress ei lisää automaattisesti mukautettuja kyselymuutoksia. Yleensä sinun on suodatettava query_varsja lisättävä mukautetut muuttujat saadaksesi WordPressin täyttämään ne. Se kuitenkin add_rewrite_endpoint()tekee tämän automaattisesti puolestamme.

Jos yritämme kuitenkin soittaa, get_query_var('movies')se ei koskaan näytä olevan asetettuna. Tämä johtuu siitä, että se olettaa, että sillä on oltava arvo, jotta se voidaan asettaa. Päätepistesäännöt olettavat, että arvo on se, mikä tulee päätepisteen jälkeen. Esimerkiksi "example.com/actor/brad-pitt/movies/some-value/" toimisi, koska tällä sivulla get_query_var('movies')palautettaisiin arvo "joku arvo". Mutta tämä ei ole sitä, mitä haluamme, haluamme sen toimivan vain yhden päätepisteen kanssa. Tämän ratkaisemiseksi meidän on kytkeydyttävä WordPressin requestsuodattimeen ja ilmoitettava WordPressille, että jos olemme päätepisteissämme, kyselyvarsien pitäisi lisätä päätepisteeseen jonkin verran arvoa (me vain asetamme sen arvoon true).

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

Jos yrität nyt käyttää get_query_vars('movies')when-toimintoa osoitteessa "example.com/actor/brad-pitt/movies/", saat arvon true(tärkeää on, että se on todella asetettu).

Ladataan mallia

Seuraava askel on päättää, mitä näille kahdelle päätepisteelle pitäisi tapahtua; tai toisin sanoen mitkä mallit haluat ladata. Tämä osa on sinun päätettävissäsi, voit liittyä siihen, template_redirectmutta se on todella suositeltavaa vain, jos haluat suorittaa varsinaisen uudelleenohjauksen. Suosittelen kiinnittymään template_includesuodattimeen ja kertomaan WordPressille, mitä malleja tulee käyttää, kun olemme mukautetuissa päätepisteissämme. Oletetaan, että teemassa on PHP-mallit single-actor-movies.phpkohteille "example.com/actor//movies/" ja single-movie-actors.php"example.com/movie//actors/".

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; });

Kun tämä suodatin on paikallaan, WordPressin tulisi ladata toimitetut mallit mukautetuille päätepisteillemme, ja näissä malleissa globaali $postobjekti olisi siihen liittyvä yksittäinen postausobjekti ennen päätepistettä – esim. yhden toimijan post-objekti, kun olemme mallin luona näyttämään kaikki elokuvissa, joissa näyttelijä on esiintynyt. Näin meidän on helppo kysyä tietoja, joita haluamme näyttää.

Haetaan päätepisteesi URL-osoite

Mukautettujen päätepisteiden ja sivujen käyttö on hienoa ja näppärää, mutta jossain sinun on linkitettävä niihin. Esimerkiksi yksittäisen elokuvan malliin haluat linkin "Katso kaikki näyttelijät", joka menee päätepisteeseesi.

Valitettavasti tätä yksinkertaista WordPress-toimintoa ei ole olemassa. Sinun on luotava URL-osoite itse. Suosittelen käyttämään [get_site_url](https://developer.wordpress.org/reference/functions/get_site_url/)()koko sivuston laajuisia päätepisteitä, tai yllä olevassa tapauksessa viittaat tiettyyn viestiin [get_the_permalink](https://developer.wordpress.org/reference/functions/get_the_permalink/)()(joko silmukan sisällä tai antamalla viestitunnuksen) ja liität päätepisteen sen jälkeen, kuten:

echo get_the_permalink(). '/actors';

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja