Controlla se la categoria corrente ha figli


11

Devo dire se l'attuale pagina di archivio di tassonomia personalizzata che sto visualizzando contiene categorie secondarie. Ho una situazione in cui ci sono molte categorie personalizzate con i bambini e il sito mostra solo i post alla fine della riga. Altrimenti dovrebbe mostrare un collegamento alla categoria che è il passaggio successivo. Ho trovato questo frammento, ma non sembra funzionare per 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()) {
        //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
    }
?>

Risposte:


10

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); // 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
}

Se il termine corrente della tassonomia ha dei figli, la get_termsfunzione restituirà un array, altrimenti ritornerà false.

Testato e funziona sulla mia installazione locale di vaniglia con plug-in UI di tipo di posta personalizzato utilizzato per la generazione CPT.


Quando ho rimosso il commento da print_r ($ children) .... è stato generato un array. Come potrebbe essere trasformato in un if / else? Siamo spiacenti, sono ancora molto nuovo su php
user29489,

1
Ignorando ho usato questo: if ($ children) {echo 'Children Here'; } else {echo 'No Children'; }
user29489

@ user29489 Hai ragione, non ero abbastanza chiaro nella mia risposta. Modificato per riferimento futuro.
montrealista

1
Per coloro che hanno solo bisogno di sapere se ci sono bambini e non hanno bisogno di ottenere i dati per i termini del bambino, suggerisco di aggiungere 'field' => 'count'per contare solo il numero di bambini.
JD,

Funziona anche con le normali categorie di post?
Pete,

9

Esiste anche una possibilità WP generica di farlo tramite get_term_children .

<?php
$children = get_term_children($termId, $taxonomyName);

if( empty( $children ) ) {
    //do something here
}

1

Supponendo che si stia tentando di filtrare i termini per mostrare solo i termini che hanno figli o meno, è possibile utilizzare effettivamente il childlessparametro nella propria get_terms()funzione.

$children = get_terms( 
    'taxonomy' => '$taxonomy_slug',
    'hide_empty' => false,
    'childless' => true
  ) 
);

Questo produrrà una serie di termini che non hanno figli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.