Vérifier si la catégorie actuelle a des enfants

11

Je dois indiquer si la page d'archive de taxonomie personnalisée actuelle que je consulte a des catégories enfants. J'ai un cas où il y a beaucoup de catégories personnalisées avec des enfants et que le site n'a pour but que d'afficher les messages à la fin de la ligne. Sinon, il devrait afficher un lien vers la catégorie correspondant à la prochaine étape. J'ai trouvé cet extrait, mais cela ne semble pas fonctionner pour les taxonomies personnalisées.

function category_has_children() {
global $wpdb;   
$term = get_queried_object();
$category_children_check = $wpdb->get_results(" SELECT * FROM wp_term_taxonomy WHERE parent = '$term->term_id' ");
    if ($category_children_check) {
        return true;
    } else {
       return false;
    }
}   

<?php
    if (!category_has_children()) {
        //use whatever loop or template part here to show the posts at the end of the line
   get_template_part('loop', 'index'); 
       }   

    else {
       // show your category index page here
    }
?>
    
posée user29489 28.03.2013 - 17:47

3 réponses

8

Il peut y avoir ou non une meilleure façon de faire cela, mais voici comment je le ferais:

$term = get_queried_object();

$children = get_terms( $term->taxonomy, array(
'parent'    => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // uncomment to examine for debugging
if($children) { // get_terms will return false if tax does not exist or term wasn't found.
    // term has children
}

Si le terme de taxonomie actuel a des enfants, la fonction get_terms renverra un tableau, sinon elle renverra false .

Testé et fonctionne sur mon installation vanilla locale avec le interface utilisateur de type publication personnalisée utilisé pour Génération de CPT.

    
réponse donnée montrealist 28.03.2013 - 18:34
8

Il existe également une possibilité pour un groupe de travail générique de le faire via get_term_children .

<?php
$children = get_term_children($termId, $taxonomyName);

if( empty( $children ) ) {
    //do something here
}
    
réponse donnée simonthesorcerer 12.12.2013 - 14:32
0

En supposant que vous essayez de filtrer vos termes pour ne montrer que les termes qui ont des enfants ou non, vous pouvez utiliser le paramètre childless dans votre fonction get_terms() .

$children = get_terms( 
    'taxonomy' => '$taxonomy_slug',
    'hide_empty' => false,
    'childless' => true
  ) 
);

Ceci produira un tableau de termes sans enfants.

    
réponse donnée Frits 20.05.2016 - 11:37

Lire d'autres questions sur les étiquettes