J'ai besoin de dire 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 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
}
?>
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 Interface utilisateur de type publication personnalisée plugin utilisé pour la génération CPT.
Il y a aussi un WP générique possibilité de le faire via get_term_children .
<?php
$children = get_term_children($termId, $taxonomyName);
if( empty( $children ) ) {
//do something here
}
En supposant que vous essayez de filtrer vos termes pour afficher uniquement les termes ayant 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
)
);
Cela produira un tableau de termes qui n'ont pas d'enfants.