Supprimer le slug d’un type de contenu sous WordPress

Les custom post types ou types de contenu personnalisé sont l’une des pièces maîtresses de WordPress. Bien que les règles de réécriture autorisent le changement du slug par une chaîne de votre choix, il est impossible nativement de le retirer afin d’obtenir des URLs plus courtes… après des heures de tests, une technique existe et elle fonctionne. Avis aux référenceurs !

Cette astuce a été initialement proposée par WordPress VIP et reprise sur de nombreux sites anglo-saxons, le lien originel affichant une erreur 404 à présent. Pour autant, cette technique a bien fonctionné dans mon cas y compris avec le plugin multilingue WPML (en multi-domaine).

N.B : vous devez utiliser /%postname%/ comme structure de permaliens pour appliquer cette astuce.

function wpc_remove_cpt_slug($post_link, $post, $leavename) {
	if ('type_de_contenu' != $post->post_type || 'publish' != $post->post_status) {
		return $post_link;
	}
	$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
	return $post_link;
}

add_filter('post_type_link', 'wpc_remove_cpt_slug', 0, 3); 

function wpc_parse_request_trick($query) {
	if (! $query->is_main_query())
	return;

	if (2 != count($query->query) || ! isset($query->query['page'])) {
		return;
	}

	if (! empty( $query->query['name'])) {
		$query->set('post_type', array('post', 'type_de_contenu', 'page'));
	}
}

add_action('pre_get_posts', 'wpc_parse_request_trick'); 

Il vous faudra remplacer type_de_contenu par l’identifiant de votre type de contenu vous l’aurez deviné. Ce bout de code est à copier dans un fichier de fonctions globales ou directement dans le functions.php de votre thème.

En d’autres termes, ce bout de code pourra basculer l’intégralité de votre site WordPress en mode /%postname%/ en indiquant au système que votre custom post type doit être traité comme un article ou une page. C’est le réglage recommandé pour optimiser votre référencement et l’appliquer aux types de contenus est une méthode intéressante dans le sens où le slug n’est pas toujours modifiable (cas des thèmes premium) et néfaste pour votre optimisation SEO.

Méfiance toutefois : je ne dis pas que cette méthode fonctionnera pour tout le monde. Dans mon cas, aucun souci à noter malgré ce que cela implique concrètement. Si vous obtenez des erreurs 404, allez dans Réglages puis Permaliens et faites Mettre à jour pour actualiser le site.

Une seconde astuce du même genre consistera à supprimer le slug de base pour vos taxonomies personnalisées. Souvenez-vous, nous faisions déjà cela à l’époque où seules les catégories existaient… le temps passe !

5 commentaires

  1. Mon coin de Bourgogne

    Bonjour,
    Astuce qui pourrait m’intéresser, mais pour des pages enfants.
    Je m’explique : utilisant WP comme un CMS, j’ai pas mal de pages de contenu, en parallèle de quelques articles de type « blog d’actu ». Mon thème (Air Balloon Lite) me permet de mettre en page d’accueil un slider qui renvoie vers mes pages, donc c’est parfait. Seul bémol : les pages en question (à mettre en slider) doivent obligatoirement être des pages-enfants de la page d’Accueil (statique). Du coup, les URL de mes pages sont du type : nom-du-site/accueil/nom-de-la-page. Et si je veux mettre une page enfant, elle devient petit-enfant de la page d’accueil, une vraie galère avec des URL à rallonge.
    D’où ma question : comment supprimer ce mot « accueil » de mes URL, sachant que c’est donc le slug de la page-parente ?
    Pensez-vous que votre astuce ci-dessus corresponde à mon besoin ? (vous dites que ça ne concerne pas les pages)

  2. mac

    Je rencontre le même problème avec un slug de post custom écrit en dur dans le code.
    Cependant au lieu de supprimer le slug existant je cherche à le remplacer automatiquement par le nom de la catégorie à laquelle appartient le custom post.
    Y a t’il un moyen en modifiant ce petit bout de code excellent pour faire ce type de remplacement?

    1. Aurélien Denis auteur de l’article

      Ce type de modification reste expérimentale et doit être mise en place avec d’énormes précautions. Je vous le déconseille si vous n’êtes pas à l’aise avec les réécritures d’URL.

      1. Macintroll

        Finalement l’utilisation de ce bout de code est amplement suffisant et rempli parfaitement mon besoin ! Merci d’avoir partagé et merci du conseil !

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