Vous êtes-vous déjà posé une question sur les réécritures d’URL personnalisées de WordPress? Ici, je m'occupais d'un problème intéressant. Je voulais ajouter une règle de réécriture sur un lien permanent et utiliser un modèle personnalisé pour cette règle de réécriture. Cependant, ceci n'est pas un article exhaustif sur la façon de faire les règles de réécriture, il y a un très bon tutoriel détaillé à ce sujet si vous voulez en savoir plus..
Ici nous avons un film
Type de poste. La structure permalien est movie / nom du film
. Je veux annexer un Photos
et vidéos
endpoint à cette URL, de sorte que la structure sera movie / nom-movie / photos
et movie / nom-movie / videos
. Comme vous pouvez le deviner, je souhaite afficher toutes les photos et vidéos sur une page distincte de ce film et utiliser un modèle de page distinct pour y parvenir..
fonction prefix_movie_rewrite_rule () add_rewrite_rule ('movie / ([^ /] +) / photos', 'index.php? movie = $ correspond à [1] & photos = yes', 'top'); add_rewrite_rule ('movie / ([^ /] +) / videos', 'index.php? movie = $ correspond [1] & videos = yes', 'top'); add_action ('init', 'prefix_movie_rewrite_rule');
Par ça add_rewrite_rule
fonction, nous ajoutons deux règles de réécriture personnalisées à l’URL et définissons deux variables de requête à l’URL. Je n'utilise pas add_rewrite_endpoint
parce que je ne veux pas ajouter ce point final à chaque lien permanent que je possède. Mais en ajoutant seulement cette règle de réécriture, ils ne fonctionneront pas et WordPress les rejettera car il ne reconnaît pas les vars de requête que nous avons ajoutés via notre fonction de règle de réécriture. Nous devons dire à WordPress d'être modeste sur ces vars de requête.
fonction prefix_register_query_var ($ vars) $ vars [] = 'photos'; $ vars [] = 'videos'; renvoyer $ vars; add_filter ('query_vars', 'prefix_register_query_var');
Maintenant que nous avons ajouté ces vars de requête à WordPress, il les reconnaîtra et nous pourrons en tirer parti. Mais si vous allez à l'URL movie / nom-movie / photos
, tu verras encore que ton single-movie.php ou single.php les modèles prennent en charge ces URL. Si vous voyez une erreur 404 pour notre URL personnalisée, ne vous inquiétez pas, enregistrez à nouveau vos permaliens..
fonction 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');
Ici, nous disons que, s'il y a une requête var Photos
ou vidéos
et c'est un single film
page, nous définissons le modèle comme single-movie-image.php et single-movie-video.php respectivement.
Alors, single-movie-image.php
est responsable de movie / nom-movie / photos
requête et single-movie-video.php
est responsable de movie / nom-movie / videos
question. Simple hein?