Page de modèle de page personnalisée basée sur la réécriture d'URL

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


Objectif:

  1. Ajouter une règle de réécriture sur un permalien de type post personnalisé
  2. Utiliser un modèle de page basé sur la règle de réécriture

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


1. Enregistrer l'URL personnalisée

 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.


2. Enregistrer la requête Vars

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


3. Définir le modèle

 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?

Remarque: Dans la section relative à la configuration du modèle de page, nous utilisons des fonctions anonymes PHP. Donc, ce code nécessite un minimum de support de PHP 5.3.0 ou vous pouvez utiliser les filtres à l'ancienne. Une chose à garder à l'esprit avec l'utilisation de fonctions anonymes est que vous ne pouvez pas annuler l'enregistrement d'un filtre ou d'une action comme vous le feriez normalement. Mais c'est un moyen facile de lier une action / un filtre sans donner un nom à la fonction.