web-dev-qa-db-fra.com

Récupère current_parent_category dans une boucle ou un gros problème d'ancêtre Cat

J'ai des problèmes depuis une semaine maintenant. .. Je passe un mauvais moment avec ça!

J'explique ma situation:

J'ai mis en place un style pour la catégorie post.

(une couleur de fond et une petite image de fond).

par exemple.

Parent A - Enfant 1 - Enfant 2 - Enfant 3

Parent B -Enfant 1 -Enfant 2

Parent C - Enfant 1 - Enfant 2

La boucle que j'utilise est:

<a href="#" class="<?php $category = get_category($cat);
echo $category->category_nicename;?>"><?php single_cat_title('') ?></a> 

Cela fonctionne bien lorsque je suis sur une page parent_category, cela apporte le style que j'ai configuré par css, en utilisant le category_slug comme classe.

(par exemple de css pour la catégorie :)

article.category-business-and-finance .meta-category2 a.business-and-finance {
color: white;
float: left;
padding: 2px;
padding-left: 25px;
background: url(myimg) no-repeat left  ;
background-size: 15px 15px;
background-color: #c3bc19  ;
background-position-x: 5px;
padding-right: 5px;
}

Cependant, lorsque je vais à la category_page d'une child_category, cela affiche le style d'une catégorie différente. comme certains messages sont configurés pour multipeler parent_category et plusieurs chld-category en même temps. Je ne veux pas créer de css pour chaque catégorie_enfant, car beaucoup de sous-catégories seraient ajoutées à l'avenir.

C’est ce que j’aimerais réaliser, c’est pour la catégorie enfants que la classe de son slug parent_category actuelle.

Comment cela est-il possible?

J'ai essayé cette boucle à la place:

<a href="#" class="<?php $parentscategory ="";
foreach((get_the_category()) as $category) {
    if ($category->category_parent == 0) {
        $parentscategory .= ' ' . $category->slug . ' ';
    }
}
echo substr($parentscategory,0,-2);?>"><?php single_cat_title('') ?></a> 

Ceci ajoute la classe de toutes les parent_category attachées à la publication. .. Y a-t-il un moyen de ne le faire que pour l'actuel?

(par exemple, sur la page de catégorie de Child-1 du parent A, mais le poste est également associé aux parents B et C. cela m'apporte la classe des parents AB et C et le moment - je voudrais joindre la classe uniquement du parent A - comme dans la catégorie enfant de la page du parent A).

Comment puis-je faire cela? devrais-je essayer une current_parent_category? cat_ancestor?

Merci pour tout votre temps,

1
tibewww

Vous pouvez utiliser get_ancestors() . Vous pouvez transformer ceci:

<a href="#" class="<?php $category = get_category($cat);
echo $category->category_nicename;?>"><?php single_cat_title('') ?></a> 

Dans ceci (je ne sais pas ce qu'est le $cat car vous ne l'avez pas indiqué dans votre question, je suppose qu'il s'agit d'un identifiant de catégorie, sinon vous devez fournir un identifiant de catégorie):

<?php

$cat_ancestors = get_ancestors( $cat, 'category' );
$top_parent = get_category( end( $cat_ancestors ) );

?>

<a href="#" class="<?php esc_attr_e( $top_parent->slug );?>"><?php echo $top_parent->name; ?></a> 

Pour que le code fonctionne également si la catégorie est déjà la catégorie parente la plus élevée, vous devez vérifier la valeur renvoyée par get_ancestors. Par exemple:

<?php

$cat_ancestors = get_ancestors( $cat, 'category' );

if( !empty($cat_ancestors) ) {

    $cat = get_category( end( $cat_ancestors ) );

} else {

    $cat = get_category( $cat );

}

?>

<a href="#" class="<?php esc_attr_e( $cat->slug );?>"><?php echo $cat->name; ?></a>
1
cybmeta