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

Posté par PUShAUNE le 25 mai 2018

5 commentaires :)

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

Tu kiffes ? Alors partage avec tes potes !

5 commentaires

  1. Le , Alex a dit :

    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,

    • Le , PUShAUNE a dit :

      Salut Alex,
      Je pense qu’en ajoutant en paramètre un is_category( ); avec les bonnes ID, ça marchera :)

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

Sois pas timide, lâche tes com’ !

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

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