Verifica se la Categoria Corrente ha Sottocategorie

28 mar 2013, 18:47:32
Visualizzazioni: 50K
Voti: 12

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
    }
?>
0
Tutte le risposte alla domanda 4
5
16

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.

28 mar 2013 19:34:29
Commenti

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

user29489 user29489
28 mar 2013 19:43:29

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

user29489 user29489
28 mar 2013 19:52:25

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

montrealist montrealist
28 mar 2013 20:02:15

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.

J.D. J.D.
30 dic 2013 21:54:32

Funziona anche con le normali categorie di post?

Pete Pete
19 nov 2018 02:48:30
0
15

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
}
12 dic 2013 15:32:27
0

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.

20 mag 2016 12:37:00
1
-2

Questa è di gran lunga la soluzione più pulita

$term = get_queried_object();
if($term->parent == 0 ){
  // esegui operazioni;
}
26 feb 2021 12:51:27
Commenti

Questo non è corretto. $term->parent == 0 ti dirà se la categoria è una sotto-categoria, ma non se ha delle sotto-categorie. Ad esempio, la categoria predefinita Uncategorized supererà il tuo test, ma non ha alcuna sotto-categoria.

Mike Mike
11 set 2021 23:59:57