Voyons comment y injecter, automatiquement, la valeur d’un champ personnalisé ou custom field.
Pré-requis
Pour ce tutoriel, il faut s’assurer que la ré-écriture d’URL est bien activée sur votre installation et que vos permaliens ont la structure suivante : Nom de l’article ou plus couramment dénommée, /%postname%/.
Vous devez aussi, avoir créé au préalable un type de contenu – je vous recommande le générateur GenerateWP, comportant au moins un champ personnalisé – via l’extension Advanced Custom Fields par exemple.
Dans ce tutoriel, nous avons un type de contenu intitulé Automobile, et nous allons ajouter à notre permalien la valeur du champ personnalisé Référence.
Au départ, notre permalien ressemble à ceci :
http://mon-site.fr/automobile/renault-kangoo-dci-70-confort/
Nous allons le transformer en :
http://mon-site.fr/automobile/renault-kangoo-dci-70-confort-ref-2015-32/
Ajouter une nouvelle règle de ré-écriture
Dans le fichier functions.php de votre thème, nous allons déclarer une nouvelle règle de ré-écriture des permaliens, pour notre type de contenu Automobile.
add_rewrite_tag();
permet de définir les éléments à passer dans le permalien. Dans notre cas, nous gardons le %automobile%
, généré à partir du titre, et nous ajoutons le %automobile_reference%
que nous remplirons par la suite, avec le champ personnalisé Référence.
add_permastruct();
permet de définir le nouveau permalien à générer. Ici, nous voulons la structure suivante : /automobile/SLUG-ref-NUMERO_REFERENCE/
Ajouter le champ personnalisé aux permaliens
Toujours dans votre fichier functions.php, nous allons créer une fonction permettant de remplacer %automobile_reference%
du permalien par le contenu du champ personnalisé Référence.
Dans cette fonction, nous vérifions que le type de contenu est bien automobile. Ensuite, nous récupérons la valeur de notre champ personnalisé cf_automobile_reference
, que nous nettoyons avec sanitize_title();
par souci de sécurité.
Enfin, il ne nous reste plus qu’à remplacer %automobile_reference%
par le contenu du champ personnalisé avec la fonction str_replace();
et à traiter le cas où aucune référence n’a été saisie dans le back-office.
Rafraichissez vos permaliens !
Une fois que votre fichier functions.php est prêt, n’oubliez pas de mettre à jour vos permaliens !
Pour ce faire, il vous suffit d’aller dans Réglages puis Permaliens. Une simple visite sur cette page suffit à rafraichir vos permaliens – pas besoin de cliquer sur Enregistrer les modifications.
Vous savez à présent comment modifier le contenu de vos permaliens, en y passant des paramètres. C’est simple, n’est-ce pas ? Nous pourrions très bien adapter cet exemple pour améliorer son SEO ou encore générer des permaliens pour nos automobiles calqués à chaque fois sur le même modèle : je veux la marque, suivi du modèle, suivi de sa puissance… À vous de jouer !
Merci à Lionet Pointet pour son œil averti et son aide sur le Slack WordPress FR. Sans lui, ce tutoriel ne fonctionnerait pas correctement.
Bonjour,
je ressort un vieux poste mais je suis un peu perdu…. J’essaye d’utiliser votre code avec un champ contenant un sous-titre. j’ai un soucis avec la fonction sanitize_title. Si je met le des tiret, j’obtiens une erreur 404. Si je ne met rien, j’obtiens des %20 mais ca fonctionne… Any idea ?
D’avance merci,
Simon
Salut,
As-tu pensé à flusher les permaliens ? Tu peux le faire en visitant la page “Réglages” > “Permaliens” (inutile de sauvegarder, une simple visite de cette page suffit).
Hello,
Sinon il existe un autre moyen aussi à l’aide d’un plugin “Easy Upload Renamer” qui à la particularité de reprendre le nom du post avec en plus la suppression des accents! je trouve que c’est un gain de temps énorme pour ceux qui ont beaucoup de média à mettre dans leurs articles.
Bon résumé de notre discussion, c’est cool de le partager, et merci pour la mention ;).
Je précise qu’il n’y a même pas besoin d’activer le “rewrite” sur le post type si les pages d’archives ne sont pas utilisées. En clair, dans l’exemple des règles vont être générées pour répondre aux URLs comme celles qui suivent si la clé “rewrite” est passée à true dans l’appel à la fonction register_post_type :
– monsite.com/automobile/
– monsite.com/automobile/feed/
– monsite.com/automobile/page/2
Si ces pages ne servent pas, autant passer la clé “rewrite” à false dans ce cas, ça évitera de surcharger les tests sur les expressions régulières.
Merci à toi Lionel et désolé pour le retard de publication du commentaire, ce dernier se trouvait dans le spam à cause des liens. 😉