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.
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.
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.
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.
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?