web-dev-qa-db-fra.com

Obtention du chemin de chemin de navigation de get_category_parents () sans lien sur le dernier élément

Juste une question: je veux utiliser get_category_parents() pour afficher un fil d'Ariane sur une page d'archive de catégorie, mais sans lien sur la catégorie affichée actuellement (à des fins de référencement, car ils disent que c'est un lien vers lui-même. Je ne suis pas sûr que les moteurs de recherche soient ça stupide, mais quand même).

Comme ça :

lien_accueil "lien_cat1" lien_subcat1 "nolink_subsubcat1

get_category_parents() est parfait pour cela, mais il n'y a que deux options: avec des liens et sans liens.

Ce que je veux, ce sont des liens MAIS sur le dernier élément.

La fonction renvoie une chaîne, pas un objet ou un tableau, je ne peux donc pas supprimer le dernier élément.

Je pourrais le faire avec regex en cherchant avec le séparateur » et en supprimant le dernier lien de cette façon, mais je suis assez mauvais avec les regex (si vous connaissez de bonnes références pour cela, je suis intéressé!).

Je sais que la réponse évidente consiste à créer une fonction personnalisée à l'aide de get_ancestors() et d'une boucle, puis d'ajouter simplement après le nom de la catégorie actuelle.

Mais je voulais savoir s'il y avait une façon plus simple, mais juste de raccrocher get_category_parents() pour ne pas ajouter de lien au dernier élément?

Merci pour toute idée.

Cordialement Simon

1
Simon

Je ne considérerais pas cela comme meilleur/pire que l'option de Kaiser, mais simplement différente. Pourquoi ne pas utiliser get_category_parents sur la catégorie parente et ensuite (éventuellement) ajouter la catégorie actuelle?

Je n'ai pas testé cela, mais quelque chose comme ce qui suit devrait fonctionner:

$cat_id=7;//current category's ID (e.g. 7)
$separator='»';//The separator to use
$category = get_category($cat_id);//$category is the current category object
$parent_id = $category[0]->category_parent //category's parent ID
$ancestors = get_category_parents($parent_id, true, $separator);

Ensuite, ajoutez éventuellement le nom de la catégorie actuelle:

 if($ancestors){
      $breadcrumb = $ancestors.$separator.' <span class="active-cat">'.single_cat_title().'</span>';
 }else{
      $breadcrumb = '<span class="active-cat">'.single_cat_title().'</span>';
 }
     echo $breadcrumb;

MODIFIER:

Il s’avère que cela correspond presque exactement à la manière dont WordPress génère le résultat: get_category_parents s’appelle de manière récursive ( voir ici ), de sorte qu’avec cette méthode, vous "l’arrêtez tôt" et vous le complétez manuellement. Cependant, aucun crochet ne peut atteindre cet effet.

3
Stephen Harris

Utiliser les fonctions PHP natives

Ce n'est pas si difficile, si vous examinez en profondeur la manipulation des chaînes/tableaux sur php.net.

// 1. Calls the category parents including their links
// 2. Explodes the string to an array with limit -1 to avoid outputting the last element
// 3. Loops through the array and echos the breadcrumbs
// 3.a Shows the » only after the first breadcrumb
foreach( explode( '//', get_category_parents( $cat, true, '//' ), -1 ) as $index => $breadcrumb )
    echo $index <= 0 ? $breadcrumb : " &raquo; {$breadcrumb}";
// 4. Echo the current category with a leading »
echo ' &raquo; <span class="breadcrumb-active-cat">'.single_cat_title().'</span>';

Note: non testé

3
kaiser

Dans une page de catégorie, vous pouvez également le faire et il laissera la catégorie actuelle du fil d'Ariane et toutes ses catégories parentes seront affichées.

   echo get_category_parents( get_queried_object()->parent, true, ' &rarr; ' ); 
0
Prafulla Kumar Sahu