J'ai trouvé le code suivant dans le thème WP Base de connaissances / afin d'afficher les sous-catégories d'une catégorie parente. Le problème est que cela ne fonctionne que pour le premier niveau de la hiérarchie, alors je voulais changer la clause if afin de vérifier si la catégorie actuelle avait des enfants, mais je ne sais pas comment faire cela, une idée? Merci
global $term_meta, $cat, $cat_id, $wp_query;
// Check if the current category is not a first level category
// This will happen if the current category does not have any child
// If this is the case, then we simply show all it's posts
// Instead of the Nice knowledgebase type things
if ( $cat->parent != '0' ) {
Vous pouvez utiliser cet appel de fonction simple qui renvoie soit TRUE
, soit FALSE
, selon que $children
est un tableau vide ou non.
/**
* Check if given term has child terms
*
* @param Integer $term_id
* @param String $taxonomy
*
* @return Boolean
*/
function category_has_children( $term_id = 0, $taxonomy = 'category' ) {
$children = get_categories( array(
'child_of' => $term_id,
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
) );
return ( $children );
}
Donc, si vous utilisez uniquement les catégories post
intégrées, vous pouvez appeler la fonction comme suit: category_has_children( 17 );
Si vous devez tester une taxonomie personnalisée, cela fonctionnera presque de la même manière, il vous suffira de passer un paramètre supplémentaire 'taxonomy-slug': category_has_children( 7, 'my_taxonomy' );
'
Pour l'appeler dans votre déclaration IF:
if( $cat->parent != 0 && ! category_has_children( $cat->term_id ) )
Il existe déjà une fonction de génération pour cela, il n'est pas nécessaire de créer une fonction personnalisée pour cela. La fonction s'appelle get_term_children()
et retournera soit
Un ensemble de termes enfant si le terme donné a des enfants
Un tableau vide si aucun terme enfant n'est trouvé
WP_Error
object si la taxonomie n'existe pas
En gardant cela à l'esprit, encapsulez get_term_children()
dans une fonction et renvoyez true ou false en fonction de la valeur renvoyée si vous avez simplement besoin d'une valeur booléenne (comme une balise conditionnelle).
function has_term_have_children( $term_id = '', $taxonomy = 'category' )
{
// Check if we have a term value, if not, return false
if ( !$term_id )
return false;
// Get term children
$term_children = get_term_children( filter_var( $term_id, FILTER_VALIDATE_INT ), filter_var( $taxonomy, FILTER_SANITIZE_STRING ) );
// Return false if we have an empty array or WP_Error object
if ( empty( $term_children ) || is_wp_error( $term_children ) )
return false;
return true;
}
Vous pouvez simplement simplement maintenant passer le terme id à la fonction et le nom de taxonomie correct si la taxonomie est autre que category
, et vous obtiendrez une valeur boolen comme les balises conditionnelles intégrées, true en cas de succès si le terme a des enfants , faux si ce n'est pas le cas.
if ( has_term_have_children( 21 ) ) {
// Do something if term 21 have children
}
Pour obtenir le nom des catégories d'enfants. J'ai utilisé la fonction de @ Howdy_McGee pour un processus plus rapide et itératif.
function category_has_children( $term_id = 0, $post_type = 'post', $taxonomy = 'category' ) {
$children = get_categories( array( 'child_of' => $term_id, 'type' => $post_type, 'taxonomy' => $taxonomy, 'order' => 'ASC', 'orderby' => 'name' ) );
if($children){
echo '<ul>';
foreach ($children as $value) {
echo '<li>';
echo '<a href="'.get_bloginfo("siteurl").'/category/'.$value->slug.'" >'.$value->name.'</a>';
echo '</li>';
}
echo '</ul>';
}
}
$cId = get_cat_id('cms'); /* cms is the parent category */
category_has_children($cId, 'post', 'category');
Ceci listera toute la sous-catégorie (enfant) d'une catégorie parent.
C'est ce que j'utilise. La variable $ cat est la catégorie SI vous vérifiez:
$categories = get_categories($cat);
if (!empty($categories)) {
// This Category has children
}
else {
// This category has no children
}
Utilisez cette fonction cat_has_subcat('paste cat id')
pour vérifier si la catégorie a des sous-catégories ou non
//paste it in your function.php
//start
function cat_has_subcat($catId){
$args = array(
'taxonomy' => 'product_cat',
'orderby' => 'name',
'parent' => $catId,
'show_count' => 0,
'pad_counts' => 0,
'hierarchical' => 1,
'title_li' => '',
'hide_empty' => false
);
$cats = get_categories($args);
if(!empty($cats)){
return $catId;
}
}
//end