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