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

11

Je dois dire si la page d'archive de taxonomie personnalisée actuelle que je consulte contient ou non des catégories enfants. J'ai une situation où il y a beaucoup de catégories personnalisées avec des enfants et le site n'affiche que les messages à la fin de la ligne. Sinon, il devrait afficher un lien vers la catégorie qui est la prochaine étape vers le bas. J'ai trouvé cet extrait, mais il 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
    }
?>
user29489
la source

Réponses:

10

Il peut y avoir ou non une meilleure façon de le faire, 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 get_termsfonction renverra un tableau, sinon elle reviendra false.

Testé et fonctionne sur mon installation vanilla locale avec le plug-in d' interface utilisateur de type de publication personnalisé utilisé pour la génération de CPT.

montréaliste
la source
Quand j'ai décommenté le print_r ($ children) .... il a sorti un tableau. Comment cela pourrait-il être transformé en un if / else? Désolé, je suis encore très nouveau sur php
user29489
1
Ignorer J'ai utilisé ceci: if ($ children) {echo 'Children Here'; } else {echo 'No Children'; }
user29489
@ user29489 Vous avez raison, je n'ai pas été assez clair dans ma réponse. Modifié pour référence future.
montréaliste
1
Pour ceux qui ont juste besoin de savoir s'il y a des enfants et qui n'ont pas besoin d'obtenir les données pour les termes enfant, je suggère d'ajouter 'field' => 'count'simplement de compter le nombre d'enfants.
JD
Cela fonctionne-t-il également avec les catégories de messages normales?
Pete
9

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

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

if( empty( $children ) ) {
    //do something here
}
simonthesorcerer
la source
1

En supposant que vous essayez de filtrer vos termes pour n'afficher que les termes qui ont des enfants ou non, vous pouvez réellement utiliser le childlessparamètre dans votre get_terms()fonction.

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

Cela produira un tableau de termes qui n'ont pas d'enfants.

Frits
la source