Verifică dacă Categoria Curentă are Subcategorii

28 mar. 2013, 18:47:32
Vizualizări: 50K
Voturi: 12

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
    }
?>
0
Toate răspunsurile la întrebare 4
5
16

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.

28 mar. 2013 19:34:29
Comentarii

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.

user29489 user29489
28 mar. 2013 19:43:29

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

user29489 user29489
28 mar. 2013 19:52:25

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

montrealist montrealist
28 mar. 2013 20:02:15

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.

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

Funcționează acest lucru și cu categoriile normale de articole?

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

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

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.

20 mai 2016 12:37:00
1
-2

Aceasta este, de departe, cea mai curată soluție

$term = get_queried_object();
if($term->parent == 0 ){
  // fă ceva;
}
26 feb. 2021 12:51:27
Comentarii

Acest lucru este incorect. $term->parent == 0 vă va spune dacă categoria este o subcategorie, dar nu dacă are subcategorii. De exemplu, categoria implicită Necategorizat ar trece testul dvs., dar nu are subcategorii.

Mike Mike
11 sept. 2021 23:59:57