Ajouter un élément au fil d’Ariane de Yoast SEO

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

Auteur : PUShAUNE

Graphiste freelance, J'ai créé un collectif à Marseille appelé Bison Bleu. Je tiens un blog pour partager mes techniques et mes expériences. Je donne aussi des cours aux élèves de l’école Axe Sud.

3 commentaires

  1. Le , François Duroy a dit :

    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

    • Le , PUShAUNE a dit :

      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 ?

      • Le , François Duroy a dit :

        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 :-(

À ton tour de participer :

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Apprenez comment les données de vos commentaires sont utilisées.