it-swarm.com.de

Überprüfen Sie, ob die aktuelle Kategorie untergeordnete Elemente enthält

Ich muss feststellen, ob die aktuelle Seite des benutzerdefinierten Taxonomiearchivs, die ich gerade ansehe, untergeordnete Kategorien enthält. Ich habe eine Situation, in der es viele benutzerdefinierte Kategorien mit Kindern gibt und die Website nur Posts am Ende der Zeile anzeigt. Andernfalls sollte ein Link zu der Kategorie angezeigt werden, die der nächste Schritt ist. Ich habe dieses Snippet gefunden, aber es scheint nicht für benutzerdefinierte Taxonomien zu funktionieren.

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
    }
?>
11
user29489

Es kann einen besseren Weg geben oder auch nicht, aber so würde ich es machen:

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

Wenn der aktuelle Taxonomiebegriff untergeordnete Elemente enthält, gibt die Funktion get_terms ein Array zurück, andernfalls false.

Getestet und funktioniert auf meiner lokalen Vanilla-Installation mit Benutzerdefiniertem Post-Typ-UI Plugin, das für die CPT-Generierung verwendet wird.

9
montrealist

Es gibt auch eine generische WP Möglichkeit, dies über get_term_children zu tun.

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

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

Angenommen, Sie versuchen, Ihre Begriffe zu filtern, um nur Begriffe anzuzeigen, die entweder untergeordnet sind oder nicht, können Sie den Parameter childless in Ihrer Funktion get_terms() verwenden.

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

Dies gibt eine Reihe von Begriffen aus, die keine Kinder haben.

0
Frits