Ajouter la valeur d’un champ personnalisé dans un permalien de WordPress

Avoir la main sur ses permaliens, c’est essentiel ! Leurs ré-écritures permet d’avoir des URLs propres et permet aussi de gérer au mieux son référencement. 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.

function wpc_add_rewrite_rules() {
	global $wp_rewrite;

	$wp_rewrite->add_rewrite_tag('%automobile%', '([^/]+)', 'automobile=');
	$wp_rewrite->add_rewrite_tag('%automobile_reference%', '([^/]+)', 'automobile_reference=');
	$wp_rewrite->add_permastruct('automobile', '/automobile/%automobile%-ref-%automobile_reference%/');
}
add_action('init', 'wpc_add_rewrite_rules', 10, 0);

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.

function wpc_permalinks($permalink, $post, $leavename) {
	$post_id = $post->ID;

	if ($post->post_type == 'automobile') {
		$automobile_reference = sanitize_title(get_post_meta($post_id, 'cf_automobile_reference', true));
		if ($automobile_reference) { 
			$permalink = str_replace('%automobile_reference%', $automobile_reference, $permalink);
		} else {
			$permalink = str_replace('%automobile_reference%', 0, $permalink);
		}
	}

	return $permalink;
}
add_filter('post_type_link', 'wpc_permalinks', 10, 3);

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.

3 commentaires

  1. Lionel

    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.

  2. Jérôme

    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.

Laisser un commentaire

Thèmes & Plugins
Premium By WP Channel

WP Alacarte propose des produits et services de qualité
made in France pour la plateforme WordPress.

Tout est prêt pour créer votre site à la carte !

  • Thèmes et extensions premium
  • Facilité d’utilisation garantie
  • Temps de chargement optimisé
  • Personnalisation avancée
Découvrir

Rejoignez la communauté WordPress !

Faites partie de l’aventure en devenant membre d’une association WordPress. Conférences, ateliers, BarCamp, WordCamp… Venez
partager votre passion pour WordPress !

Aurélien DENIS,
président des associations WordPress Francophone et WPMX