Si vous avez un site complexe, il arrive souvent d’avoir une catégorie enfant d’une page sur WordPress. Dans ce cas, le fil d’Ariane basique de Yoast SEO devient faussé et ne correspond plus à votre arborescence. Voilà comment le corriger.
Problématique
Avec une arborescence complexe, on peut avoir des cas de catégories d’articles (ou du Custom Post Type) qui arrivent en enfant de pages. Par exemple, je peux avoir la page parent Actualités avec en sous pages :
- Réseaux sociaux (page avec des push FaceBook, Twitter, …),
- Vos photos (page avec des push Instagram, …),
- Blog (catégorie de post).
Dans ce cas là, YoastSEO génère un fil d’Ariane suivant pour notre catégorie Blog :
Accueil > Blog > Titre de mon article.
Vous l’avez compris, le soucis vient entre Accueil et Blog : il manque notre page Actualités.
Solution
Voilà un bout de code à insérer dans votre function.php :
add_filter( 'wpseo_breadcrumb_links', 'wpse_100012_override_yoast_breadcrumb_trail' );
function wpse_100012_override_yoast_breadcrumb_trail( $links ) {
global $post;
if ( is_home() || is_singular( 'post' ) || is_archive() ) {
$breadcrumb[] = array(
'url' => get_permalink( get_option( 'page_for_posts' ) ),
'text' => 'Blog',
);
array_splice( $links, 1, -2, $breadcrumb );
}
return $links;
}
Voilà les explication :
if ( is_home() || is_singular( 'post' ) || is_archive() ) {
Je détecte si je me trouve sur la page d'acceuil, une page de type post ou une page d'archive.
'url' => get_permalink( get_option('page_for_posts' ) ),
'text' => 'Blog',
Je défini l'url de mon lien et son texte
array_splice( $links, 1, -2, $breadcrumb );
J'ajoute mon lien après le premier terme de mon fil d'Ariane
Et pour les custom post type ?
C’est pas plus compliqué. On va cette-fois ci détecter si on se trouve sur une page d’article type CPT, ou une archive de ce même CPT.
Ensuite, on a plus qu’à configurer le lien avec l’ID de la catégorie :
add_filter( 'wpseo_breadcrumb_links', 'wpse_100012_override_yoast_breadcrumb_trail' );
function wpse_100012_override_yoast_breadcrumb_trail( $links ) {
global $post;
// On vérifie si l'on se trouve sur un post de type Experience, ou bien sur une de ses archives.
if ( is_singular( 'experience' ) || is_post_type_archive( 'experience' ) ) {
$breadcrumb[] = array(
'url' => get_permalink( 38 ),
// 38 est l'ID de ma catégorie.
'text' => 'LE_TEXTE_DE_MON_ITEM_À_REMPLACER',
);
array_splice( $links, 1, -2, $breadcrumb );
}
return $links;
}
See ya’ space integrator
Summary
Article Name
Ajouter un élément au fil d’Ariane de Yoast SEO
Description
Si vous avez un site complexe, il arrive souvent d'avoir une catégorie enfant d'une page sur WordPress. Dans ce cas, le fil d'Ariane basique de Yoast SEO devient faussé et ne correspond plus à votre arborescence. Voilà comment le corriger.
Nicolas AUNE
Nicolas AUNE
Nicolas AUNE
Nicolas AUNE
Bonjour,
Très utile cet article ! en revanche je ne parviens pas à faire ce dont je recherche…
Actuellement j’ai :
Accueil=>catégorie1=>article1
Accueil=>catégorie1=>article2
Accueil=>catégorie2=>article3
Et je souhaiterais :
Accueil=>page1=>catégorie1=>article1
Accueil=>page1=>catégorie1=>article2
Accueil=>page1=>catégorie2=>article3
Accueil=>page2=>catégorie3=>article4
…
Autrement dit, je souhaiterais ajouter une page parente à certaines catégories. J’imaginais une formule de ce type :
SI … catégorie = categorie1 ou categorie2 alors page1 est ajouté avant
SI … catégorie = categorie3 ou categorie 4 alors page2 est ajouté avant
SI… article appartient à catégorie 1 alors page1 est ajouté avant categorie1
etc…
Je ne parviens pas à convertir mon idée en php… Si vous pouvez éventuellement m’aider vous serez mon héro !
(à savoir qu’il y a que 8 pages intermédiaires)
Je vous remercie par avance,
Salut Alex,
Je pense qu’en ajoutant en paramètre un is_category( ); avec les bonnes ID, ça marchera :)
Hello PushAune,
Merci pour cet article.
J’ai modifié un peu le code pour mes besoins et je pensais que tout fonctionnait tip top. Jusqu’à ce que je découvre que mon fil d’Ariane avait disparu de la page de mes articles.
J’ai utilisé ta fonction pour ajouter un lien sur deux pages où j’affiche des données de taxonomies personnalisées et les posts dédiés.
add_filter( ‘wpseo_breadcrumb_links’, ‘fjd_add_breadcrumb’ );
function fjd_add_breadcrumb( $links ) {
if ( is_tax (‘traducteurs’) || is_tax (‘auteurs’) ) {
$breadcrumb[] = array(
‘url’ => get_permalink( 649 ),
‘text’ => ‘Edition’,
);
array_splice( $links, 1, -2, $breadcrumb );
return $links;
}
}
Sur ces pages là, tout fonctionne bien, mais sur mes pages d’articles, le fil d’ariane a disparu complètement.
As tu une idée d’où cela pourrait provenir?
Merci d’avance
Salut François,
Pourquoi est-ce que tu utilises is_tax qui m’a l’air assez large. Tu n’aurais pas moyen de cibler plus précisément tes pages ?
Il s’agit bien de page ou des catégories de CPT ?
Salut,
Merci pour ta réponse.
Et bien en réalité j’utilise is_tax de manière plus précise pour mes deux custom taxo.. il s’agit de page de termes de taxonomies (taxonomy-slug.php).. auxquelles je fais précéder au sein du fil d’ariane leur page respective de taxonomie.
Tout marche sur ces pages là, mais sur mes single.php
Vraiment bizarre :-(