Comprobar si la Categoría Actual tiene Subcategorías
Necesito determinar si la página de archivo de taxonomía personalizada que estoy viendo tiene categorías hijas. Tengo una situación donde hay muchas categorías personalizadas con subcategorías y el sitio solo debe mostrar publicaciones al final de la línea. De lo contrario, debería mostrar un enlace a la categoría que es el siguiente paso. He encontrado este fragmento, pero no parece funcionar para taxonomías personalizadas.
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()) {
// usar cualquier bucle o parte de plantilla aquí para mostrar las publicaciones al final de la línea
get_template_part('loop', 'index');
}
else {
// mostrar tu página de índice de categorías aquí
}
?>

Puede que exista o no una mejor manera de hacer esto, pero aquí te muestro cómo lo haría yo:
$term = get_queried_object();
$children = get_terms( $term->taxonomy, array(
'parent' => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // descomenta para examinar durante depuración
if($children) { // get_terms devolverá false si la taxonomía no existe o no se encontró el término.
// el término tiene hijos
}
Si el término de taxonomía actual tiene hijos, la función get_terms
devolverá un array, de lo contrario devolverá false
.
Probado y funciona en mi instalación local básica con el plugin Custom Post Type UI utilizado para la generación de CPT.

Cuando descomenté el print_r($children)... mostró un array. ¿Cómo podría convertirse eso en un if/else? Lo siento, todavía soy muy nuevo en php

Olvídalo, usé esto: if ($children) { echo 'Hay hijos'; } else { echo 'No hay hijos'; }

@user29489 Tienes razón, no fui lo suficientemente claro en mi respuesta. Editado para referencia futura.

Para aquellos que solo necesitan saber si hay hijos y no necesitan obtener los datos de los términos hijos, sugiero agregar 'field' => 'count'
para simplemente contar el número de hijos.

También existe una posibilidad genérica en WP para hacer esto mediante get_term_children.
<?php
$children = get_term_children($termId, $taxonomyName);
if( empty( $children ) ) {
//hacer algo aquí
}

Suponiendo que estás intentando filtrar tus términos para mostrar solo aquellos que tienen hijos o no, en realidad puedes usar el parámetro childless
en tu función get_terms()
.
$children = get_terms(
'taxonomy' => '$taxonomy_slug',
'hide_empty' => false,
'childless' => true
)
);
Esto devolverá un array de términos que no tienen hijos.
