Verifică dacă Categoria Curentă are Subcategorii
Am nevoie să determin dacă pagina de arhivă a taxonomiei personalizate pe care o vizualizez are subcategorii. Am o situație în care există multe categorii personalizate cu subcategorii, iar site-ul trebuie să afișeze postări doar la sfârșitul ramificației. În caz contrar, ar trebui să afișeze un link către categoria care urmează în ierarhie. Am găsit acest fragment de cod, dar nu pare să funcționeze pentru taxonomii personalizate.
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()) {
// folosește orice buclă sau parte de șablon aici pentru a afișa postările la sfârșitul ramificației
get_template_part('loop', 'index');
}
else {
// afișează pagina de index a categoriei aici
}
?>

Poate exista sau nu o metodă mai bună de a face asta, dar iată cum aș proceda eu:
$term = get_queried_object();
$children = get_terms( $term->taxonomy, array(
'parent' => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // decomentează pentru depanare
if($children) { // get_terms va returna false dacă taxonomia nu există sau termenul nu a fost găsit
// termenul are copii
}
Dacă termenul curent al taxonomiei are copii, funcția get_terms
va returna un array, altfel va returna false
.
Testat și funcționează pe instalarea mea locală standard folosind pluginul Custom Post Type UI pentru generarea CPT-urilor.

Când am decomentat print_r($children)... a afișat un array. Cum aș putea transforma asta într-o structură if/else? Îmi cer scuze, sunt încă foarte nou în PHP.

Nu mai contează, am folosit asta: if ($children) { echo 'Există Copii'; } else { echo 'Nu Există Copii'; }

@user29489 Ai dreptate, nu am fost suficient de clar în răspunsul meu. Am editat pentru referințe viitoare.

Pentru cei care trebuie doar să știe dacă există termeni copil și nu au nevoie de datele acestora, sugerez să adăugați 'field' => 'count'
pentru a număra doar numărul de termeni copil.

Există și o posibilitate generică în WP pentru a face acest lucru prin intermediul get_term_children.
<?php
$children = get_term_children($termId, $taxonomyName);
if( empty( $children ) ) {
//fă ceva aici
}

Presupunând că încercați să filtrați termenii pentru a afișa doar termenii care au sau nu au descendenți, puteți folosi parametrul childless
în funcția get_terms()
.
$children = get_terms(
'taxonomy' => '$taxonomy_slug',
'hide_empty' => false,
'childless' => true
)
);
Aceasta va returna un array cu termeni care nu au descendenți.
