Sprawdź, czy w bieżącej kategorii są dzieci

11

Muszę powiedzieć, czy bieżąca niestandardowa strona archiwum taksonomii, którą przeglądam, ma kategorie potomne. Mam sytuację, w której istnieje wiele niestandardowych kategorii z dziećmi, a strona ma tylko pokazywać posty na końcu linii. W przeciwnym razie powinien wyświetlić link do kategorii, która jest kolejnym krokiem w dół. Znalazłem ten fragment, ale wydaje się, że nie działa w przypadku niestandardowych systematyk.

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
    }
?>
użytkownik29489
źródło

Odpowiedzi:

10

Może być lepszy sposób, ale może to zrobić tak:

$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
}

Jeśli bieżący termin taksonomii obejmuje dzieci, get_termsfunkcja zwróci tablicę, w przeciwnym razie zwróci false.

Przetestowano i działa na mojej lokalnej instalacji waniliowej z wtyczką UI użytkownika używaną do generowania CPT.

montrealist
źródło
Kiedy odkomentowałem print_r ($ children) .... wyprowadził tablicę. Jak można to zmienić w if / else? Przepraszam, wciąż jestem nowy w php
user29489,
1
Zignoruj: użyłem tego: if ($ children) {echo 'Children Here'; } else {echo „No Children”; }
user29489,
@ user29489 Masz rację, moja odpowiedź nie była wystarczająco jasna. Edytowane do wykorzystania w przyszłości.
montrealista
1
Dla tych, którzy muszą tylko wiedzieć, czy są jakieś dzieci i nie muszą uzyskiwać danych dla warunków potomnych, sugeruję dodanie, 'field' => 'count'aby policzyć tylko liczbę dzieci.
JD
Czy to działa również z normalnymi kategoriami postów?
Pete,
9

Istnieje również ogólna możliwość WP, aby to zrobić za pośrednictwem get_term_children .

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

if( empty( $children ) ) {
    //do something here
}
simonthesorcerer
źródło
1

Zakładając, że próbujesz filtrować swoje terminy, aby pokazać tylko te, które mają dzieci lub nie, możesz faktycznie użyć childlessparametru w swojej get_terms()funkcji.

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

Spowoduje to wyświetlenie tablicy terminów, które nie mają dzieci.

Frytki
źródło