web-dev-qa-db-fra.com

Si la catégorie est dans la catégorie parente?

J'ai la fonction qui vérifie quelle est la catégorie principale principale de poste. J'ai donc un arbre de catégorie comme celui-ci

Foo
-bar
--foobar
cat2

et si post est dans foobar, ma fonction post_is_in_descendant_category me montre "foo" et je peux styliser cette publication avec style-foo.css. Ce que je veux maintenant, c’est de rendre cela possible pour la page de catégorie "foobar". Les fonctions Wordpress in_category ne fonctionnent que pour les publications.

Donc, mon code if ( in_category( 'foo' ) || post_is_in_descendant_category( get_term_by( 'name', 'foo', 'category' )) || is_category('56') ) ne fonctionne pas pour les sous-catégories.

Si je comprends bien, votre fonction "post_is_in_descendant_category" vérifie si un message est le descendant d'une catégorie et que vous souhaitez vérifier si une catégorie est une descendance. Si tel est le cas, ajoutez cette fonction à votre functions.php

function is_desc_cat($cats, $_post = null) {
  foreach ((array)$cats as $cat) {
    if (in_category($cat, $_post)) {
      return true;
    } else {
      if (!is_int($cat)) $cat = get_cat_ID($cat);
      $descendants = get_term_children($cat, 'category');
      if ($descendants && in_category($descendants, $_post)) return true;
    }
  }

return false;
}

et l'utiliser comme ça:

if (is_desc_cat("foo")) {
  // use foo.css
} else {
  // use default.css
}

J'espère que cela t'aides.

4
Bainternet

Essaye ça:

$cat_id = $wp_query->get_queried_object_id();
$parents = explode( '/', get_category_parents( $cat_id, false ) );

if( in_array( 'foo', $parents ) ) {

}
elseif( in_array( 'cat2', $parents ) ) {

}
else {


}
2
Rarst