Verifica se la Categoria Corrente ha Sottocategorie
Ho bisogno di determinare se la pagina dell'archivio della tassonomia personalizzata che sto visualizzando ha delle sottocategorie. Mi trovo in una situazione dove ci sono molte categorie personalizzate con sottocategorie e il sito deve mostrare i post solo al termine della gerarchia. Altrimenti dovrebbe mostrare un link alla categoria del livello successivo. Ho trovato questo snippet di codice, ma non sembra funzionare per le tassonomie personalizzate.
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()) {
//usa qualsiasi loop o parte del template qui per mostrare i post alla fine della gerarchia
get_template_part('loop', 'index');
}
else {
// mostra qui la tua pagina indice delle categorie
}
?>

Potrebbe esserci o meno un modo migliore per farlo, ma ecco come lo farei:
$term = get_queried_object();
$children = get_terms( $term->taxonomy, array(
'parent' => $term->term_id,
'hide_empty' => false
) );
// print_r($children); // decommenta per esaminare a scopo di debug
if($children) { // get_terms restituirà false se la tassonomia non esiste o il termine non viene trovato
// il termine ha figli
}
Se il termine tassonomico corrente ha figli, la funzione get_terms
restituirà un array, altrimenti restituirà false
.
Testato e funzionante sulla mia installazione vanilla locale con il plugin Custom Post Type UI utilizzato per la generazione dei CPT.

Quando ho rimosso il commento da print_r($children)... ha restituito un array. Come potrei trasformarlo in un if/else? Scusa, sono ancora molto nuovo a php

Ignora, ho usato questo: if ($children) { echo 'Ci sono figli'; } else { echo 'Nessun figlio'; }

@user29489 Hai ragione, non sono stato abbastanza chiaro nella mia risposta. Ho modificato per riferimento futuro.

Per coloro che hanno solo bisogno di sapere se ci sono termini figli senza dover recuperare i dati dei termini figli, suggerisco di aggiungere 'field' => 'count'
per contare semplicemente il numero di elementi figli.

C'è anche una possibilità generica in WP per farlo tramite get_term_children.
<?php
$children = get_term_children($termId, $taxonomyName);
if( empty( $children ) ) {
//fai qualcosa qui
}

Supponendo che tu stia cercando di filtrare i tuoi termini per mostrare solo quelli che hanno figli o meno, puoi effettivamente utilizzare il parametro childless
nella tua funzione get_terms()
.
$children = get_terms(
'taxonomy' => '$taxonomy_slug',
'hide_empty' => false,
'childless' => true
)
);
Questo restituirà un array di termini che non hanno figli.
