logo

Fil d’Ariane (Breadcrumb) compatible avec Custom Post Type sous WordPress [functions + PHP]

Voici les codes pour un fil d’Ariane complet qui comprend aussi les Customs Post Type. 2 versions au choix (cela dépend de la structure de votre thème) une dans le « dur » direct dans le thème et l’autre dans le fichier functions.php

Il est important de faire un choix entre woocommerce et un custom post type ligne 12 (si vous n’avez ni l’un ni l’autre : laisser tel quel)

 

Version simple

Création d’un fichier fil-ariane.php à placer dans votre thème

<div class="fildariane">
<?php // Breadcrumb navigation
if (!is_front_page()) {
echo '<span class="icon"><i class="fa fa-compass" aria-hidden="true"></i></span><a title="Accueil" rel="nofollow" href="';
echo get_option('home');
echo '">';
echo 'Accueil';
echo "</a><span class='icon'><i class='fa fa-angle-right' aria-hidden='true'></i></span>";
global $post;
if (is_single()){

// dans le cas où vous avez Woocommerce ou un custom post type (choisir l'un ou l'autre pas les deux ensembles) mais laisser ces lignes actives
$nom_post_lowercase = 'product'; // pour woocommerce ou alors changer par le nom de votre custom post type
$nom_custom_categorie_replaced = 'product_cat';  // pour woocommerce ou alors changer par le nom de la catégorie de votre custom post type

switch($post->post_type){
case 'post' :
$postcat = get_the_category( $post->ID );
$term_id = $postcat[0]->term_id;
echo get_term_parents_list( $term_id, 'category', array( 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
break;
case $nom_post_lowercase : // Ajouter ce cas pour le traitement de notre post type
$postcat = get_the_terms($post->ID, $nom_custom_categorie_replaced); //recuperations des termes de la custon catégorie
$term_id = $postcat[0]->term_id;
echo get_term_parents_list( $term_id, $nom_custom_categorie_replaced, array( 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
break;
}
echo the_title();
}
if (is_category()) {
$query_obj = get_queried_object();
$term_id = $query_obj->term_id;
$taxonomy = get_taxonomy( $query_obj->taxonomy );
if ( $term_id && $taxonomy ) {
$parents = get_term_parents_list( $term_id, $taxonomy->name, array( 'inclusive' => false, 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
}
echo $parents.''.$query_obj->name;
}
if (is_archive() && !is_category() && !is_post_type_archive()) {// affichage des postes d'un terme de notre custom catégorie
$query_obj = get_queried_object();
$term_id = $query_obj->term_id;
$taxonomy = get_taxonomy( $query_obj->taxonomy );
if ( $term_id && $taxonomy ) {
$parents = get_term_parents_list( $term_id, $taxonomy->name, array( 'inclusive' => false, 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
}
if($parents){
single_cat_title($parents);
}else{
single_cat_title();
}
}
if (is_post_type_archive()) {
post_type_archive_title();
}
if (is_home()) {
single_post_title();
}
if (is_page() && !is_single()) {
$ancestors = get_post_ancestors($post);
if ($ancestors) {
$ancestors = array_reverse($ancestors);
foreach ($ancestors as $crumb) {
echo '<a href="' . get_permalink($crumb) . '">' . get_the_title($crumb) . '</a><span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span> ';
}
}

echo the_title();

}
if (is_search()) {
echo sprintf( __( '%s Search Results for ', 'emandarine' ), $wp_query->found_posts );
echo sprintf( __('"', 'emandarine' ), $wp_query->found_posts );
echo get_search_query().'"';
}
}
echo '</nav>';
?>
</div>

Intégration dans votre thème php

<?php get_template_part('fil-ariane') ?>


Version plus compliquée

Ou dans functions.php

//Variables globales pour changer en une fois tous les noms de votre custom Post Type et catégories pour CPT

$nom_custom_post_type = 'CustomPost'; //peut être changé
$nom_custom_categorie = 'cptcategorie'; //peut être changé


// le fil d'Ariane
function the_breadcrumb()
{
echo '<nav class="fildariane" aria-label="Breadcrumb">';
if (!is_front_page()) {
echo '<span class="icon"><i class="fa fa-compass" aria-hidden="true"></i></span><a title="Accueil" rel="nofollow" href="';
echo get_option('home');
echo '">';
echo 'Accueil';
echo "</a><span class='icon'><i class='fa fa-angle-right' aria-hidden='true'></i></span>";
if (is_single()){
global $post;
global $nom_custom_post_type; 
global $nom_custom_categorie;

$nom_post_replaced = str_replace(" ", "", $nom_custom_post_type);
$nom_post_lowercase = strtolower($nom_post_replaced);
$nom_custom_categorie_replaced = str_replace(" ", "", $nom_custom_categorie);

switch($post->post_type){
case 'post' :
$postcat = get_the_category( $post->ID );
$term_id = $postcat[0]->term_id;
echo get_term_parents_list( $term_id, 'category', array( 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
break;
case $nom_post_lowercase : // Ajouter ce cas pour le traitement de notre post type
$postcat = get_the_terms($post->ID, $nom_custom_categorie_replaced); //recuperations des termes de la custon catégorie
$term_id = $postcat[0]->term_id;
echo get_term_parents_list( $term_id, $nom_custom_categorie_replaced, array( 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
break;
}
echo the_title();
}
if (is_category()) {
$query_obj = get_queried_object();
$term_id = $query_obj->term_id;
$taxonomy = get_taxonomy( $query_obj->taxonomy );
if ( $term_id && $taxonomy ) {
$parents = get_term_parents_list( $term_id, $taxonomy->name, array( 'inclusive' => false, 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
}
echo $parents.''.$query_obj->name;
}
if (is_archive() && !is_category() && !is_post_type_archive()) {// affichage des postes d'un terme de notre custom catégorie
$query_obj = get_queried_object();
$term_id = $query_obj->term_id;
$taxonomy = get_taxonomy( $query_obj->taxonomy );
if ( $term_id && $taxonomy ) {
$parents = get_term_parents_list( $term_id, $taxonomy->name, array( 'inclusive' => false, 'separator' => '<span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' ) );
}
if($parents){
single_cat_title($parents);
}else{
single_cat_title();
}
}
if (is_post_type_archive()) {
post_type_archive_title();
}
if (is_home()) {
single_post_title();
}
if (is_page()) {
$ancestors = get_post_ancestors($post);
if ($ancestors) {
$ancestors = array_reverse($ancestors);
foreach ($ancestors as $crumb) {
echo '<a href="' . get_permalink($crumb) . '">' . get_the_title($crumb) . '</a><span class="icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span> ';
}
}
echo the_title();
}
if (is_search()) {
echo sprintf( __( '%s Search Results for ', 'emandarine' ), $wp_query->found_posts );
echo sprintf( __('"', 'emandarine' ), $wp_query->found_posts );
echo get_search_query().'"';
}
}
echo '</nav>';
}

Dans votre thème php

<?php echo the_breadcrumb() ?>