Überprüfen Sie, ob die aktuelle Kategorie Kinder hat


11

Ich muss feststellen, ob die aktuelle benutzerdefinierte Taxonomie-Archivseite, die ich ansehe, untergeordnete Kategorien enthält. Ich habe eine Situation, in der es viele benutzerdefinierte Kategorien mit Kindern gibt und auf der Website nur Beiträge am Ende der Zeile angezeigt werden. Andernfalls sollte ein Link zu der Kategorie angezeigt werden, die der nächste Schritt nach unten ist. Ich habe dieses Snippet gefunden, aber es scheint für benutzerdefinierte Taxonomien nicht 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
    }
?>

Antworten:


10

Es gibt vielleicht einen besseren Weg, dies zu tun oder nicht, aber so würde ich es tun:

$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 Kinder hat, gibt die get_termsFunktion ein Array zurück, andernfalls wird es zurückgegeben false.

Getestet und funktioniert auf meiner lokalen Vanille-Installation mit dem Custom Post Type UI- Plugin, das für die CPT-Generierung verwendet wird.


Als ich das print_r ($ children) auskommentierte, gab es ein Array aus. Wie könnte daraus ein Wenn / Sonst werden? Entschuldigung, ich bin noch sehr neu in PHP
User29489

1
Ignorieren Ich habe folgendes verwendet: if ($ children) {echo 'Children Here'; } else {echo 'Keine Kinder'; }
user29489

@ user29489 Du ​​hast recht, ich war in meiner Antwort nicht klar genug. Zum späteren Nachschlagen bearbeitet.
Montrealist

1
Für diejenigen, die nur wissen müssen, ob es Kinder gibt und die Daten für die untergeordneten Begriffe nicht abrufen müssen, empfehle ich 'field' => 'count', nur die Anzahl der Kinder zu zählen.
JD

Funktioniert dies auch mit normalen Beitragskategorien?
Pete

9

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
}

1

Angenommen, Sie versuchen, Ihre Begriffe zu filtern, um nur Begriffe anzuzeigen, die entweder untergeordnete Elemente haben oder nicht, können Sie den childlessParameter tatsächlich in Ihrer get_terms()Funktion verwenden.

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

Dadurch wird eine Reihe von Begriffen ausgegeben, die keine untergeordneten Elemente haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.