Aangepaste paginasjabloonpagina op basis van URL Rewrite

Heeft u zich ooit afgevraagd of WordPress herschrijft met aangepaste URL's? Hier had ik te maken met een interessant probleem. Ik wilde een herschrijfregel toevoegen aan een permanente link en wilde een aangepaste sjabloon gebruiken voor die herschrijfregel. Dit is echter geen uitputtend bericht over hoe u herschrijfregels kunt toepassen, er is een zeer goede gedetailleerde tutorial over dit als u meer details wilt weten.


Doelstelling:

  1. Voeg een herschrijfregel toe aan een aangepast berichttype permalink
  2. Gebruik een paginasjabloon op basis van de herschrijfregel

Hier hebben we een film berichttype. De permalink-structuur is movie / film-name. Ik wil een toevoegen foto's en videos eindpunt naar die URL, dus de structuur zal zijn movie / film-name / foto's en movie / film-name / video's. Zoals je kunt raden, wil ik alle foto's en video's op een aparte pagina van die film weergeven en wil ik een afzonderlijke paginasjabloon gebruiken om dit te bereiken.


1. Registreer aangepaste URL

 function prefix_movie_rewrite_rule () add_rewrite_rule ('movie / ([^ /] +) / photos', 'index.php? movie = $ overeenkomsten [1] & photos = yes', 'top'); add_rewrite_rule ('movie / ([^ /] +) / videos', 'index.php? movie = $ komt overeen met [1] & videos = yes', 'top');  add_action ('init', 'prefix_movie_rewrite_rule');

Door deze add_rewrite_rule functie, voegen we twee aangepaste herschrijfregels toe aan de URL en stellen twee queryvariabelen in op de URL. Ik gebruik het niet add_rewrite_endpoint omdat ik dit eindpunt niet wil toevoegen aan elke permalink die ik heb. Maar door alleen deze herschrijfregel toe te voegen, zullen ze niet werken en WordPress zal ze weigeren omdat het die queryvars niet herkent die we hebben toegevoegd via onze herschrijfregelfunctie. We moeten WordPress als bescheiden beschouwen in deze query-vars.


2. Registreer query's Vars

 function prefix_register_query_var ($ vars) $ vars [] = 'photos'; $ vars [] = 'video's'; return $ vars;  add_filter ('query_vars', 'prefix_register_query_var');

Nu we deze queryvars aan WordPress hebben toegevoegd, zal deze ze herkennen en kunnen we er gebruik van maken. Maar als je naar de URL gaat movie / film-name / foto's, toch zul je zien dat je single-movie.php of single.php sjablonen zorgen voor deze URL's. Als u de 404-fout voor onze aangepaste URL ziet, hoeft u zich geen zorgen te maken, sla uw permalinks opnieuw op.


3. Stel de sjabloon in

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

Hier zeggen we dat, als er een zoekopdracht var foto's of videos en het is een single film pagina, stellen we de sjabloon in als single-movie-image.php en single-movie-video.php respectievelijk.

Zo, single-movie-image.php is verantwoordelijk voor movie / film-name / foto's vraag en single-movie-video.php is verantwoordelijk voor movie / film-name / video's query. Eenvoudig eh?

Notitie: In het gedeelte over het instellen van de paginasjabloon gebruiken we PHP anonieme functies. Deze code heeft dus minimale PHP 5.3.0-ondersteuning nodig of je kunt de filters op de oude manier gebruiken. Een ding om te onthouden met het gebruik van anonieme functies is dat u een registratie van een filter of actie niet ongedaan kunt maken zoals u dat normaal zou kunnen doen. Maar het is een eenvoudige manier om een ​​actie / filter te binden zonder de functie een naam te geven.