Siden for egendefinert side mal basert på URL-omskrivning

Noen gang lurt på om WordPress egendefinerte URL-omskrivninger? Her jobbet jeg med et interessant problem. Jeg ønsket å legge til en omskrivningsregel på en permalink og ønsket å bruke en tilpasset mal for den omskrivningsregelen. Dette er imidlertid ikke et uttømmende innlegg om hvordan du gjør omskrivningsregler, det er en veldig god detaljert veiledning om dette hvis du vil vite mer detaljer.


Objektiv:

  1. Legg til en omskriftsregel på en permalink for tilpasset posttype
  2. Bruk en sidemal basert på omskrivningsregelen

Her har vi en film posttype. Permalinkstrukturen er film / film-name. Jeg vil legge til en bilder og videoer sluttpunkt til den url, så strukturen vil bli film / film-name / bilder og film / film-name / videoer. Som du kan gjette, vil jeg vise alle bildene og videoene på en egen side fra den filmen, og vil bruke en egen sidemal for å oppnå dette.


1. Registrer egendefinert nettadresse

 funksjon prefix_movie_rewrite_rule () add_rewrite_rule ('movie / ([^ /] +) / photos', 'index.php? movie = $ matches [1] & photos = yes', 'top'); add_rewrite_rule ('movie / ([^ /] +) / videos', 'index.php? movie = $ matches [1] & videos = yes', 'top');  add_action ('init', 'prefix_movie_rewrite_rule');

Av dette add_rewrite_rule funksjon, legger vi til to tilpassede omskrivningsregler til nettadressen og angir to spørringsvariabler til URL-adressen. Jeg bruker ikke add_rewrite_endpoint fordi jeg ikke vil legge til dette endepunktet til hver permalink jeg har. Men ved å bare legge til denne omskrivningsregelen vil de ikke fungere, og WordPress vil avvise dem fordi det ikke gjenkjenner spørringen vars vi har lagt til via vår omskrivningsregelfunksjon. Vi må fortelle WordPress å være beskjeden på denne spørringen vars.


2. Registrer søkevarsler

 funksjon prefix_register_query_var ($ vars) $ vars [] = 'photos'; $ vars [] = 'videoer'; returner $ vars;  add_filter ('query_vars', 'prefix_register_query_var');

Nå, ettersom vi har lagt til spørringen vars til WordPress, vil den gjenkjenne dem, og vi kan dra nytte av dem. Men hvis du går til nettadressen film / film-name / bilder, fortsatt ser du at din single-movie.php eller single.php maler tar vare på disse nettadressene. Hvis du ser 404 feil for vår egendefinerte nettadresse, ikke bekymre deg, bare lagre permalinkene dine på nytt.


3. Angi mal

 funksjon prefix_url_rewrite_templates () if get_query_var ('photos') && is_singular ('movie')) add_filter ('template_include', funksjon () return get_template_directory (). '/single-movie-image.php';) ;  hvis (get_query_var ('videos') && is_singular ('movie')) add_filter ('template_include', funksjon () return get_template_directory (). '/single-movie-video.php';);  add_action ('template_redirect', 'prefix_url_rewrite_templates');

Her sier vi at hvis det er en spørring var bilder eller videoer og det er en singel film siden, setter vi inn malen som single-film-image.php og single-film-video.php henholdsvis.

Så, single-film-image.php er ansvarlig for film / film-name / bilder spørring og single-film-video.php er ansvarlig for film / film-name / videoer spørsmål. Enkel eh?

Merk: I avsnittet om å sette sidemalen, bruker vi PHP anonyme funksjoner. Så, denne koden vil trenge minimum PHP 5.3.0-støtte, eller du kan bruke filtrene på den gamle måten. En ting å huske med å bruke anonyme funksjoner er at du ikke kan avregistrere et filter eller en handling som du kunne gjøre normalt. Men det er en enkel måte å binde en handling / filter uten å gi funksjonen et navn.