Überprüfen Sie, ob die aktuelle Kategorie Unterkategorien aufweist

Ich habe das folgende Codeelement im WP Knowledge Base- Thema gefunden, um Unterkategorien einer übergeordneten Kategorie anzuzeigen. Das Problem ist, dass dies nur für die erste Hierarchieebene funktioniert, also wollte ich die if-Klausel ändern, um zu prüfen, ob die aktuelle Kategorie Kinder hat, aber ich habe keine Ahnung, wie das geht, irgendeine Idee? Vielen Dank

global $term_meta, $cat, $cat_id, $wp_query; // Check if the current category is not a first level category // This will happen if the current category does not have any child // If this is the case, then we simply show all it's posts // Instead of the nice knowledgebase type things if ( $cat->parent != '0' ) { 

Solutions Collecting From Web of "Überprüfen Sie, ob die aktuelle Kategorie Unterkategorien aufweist"

Sie könnten diesen einfachen functionsaufruf verwenden, der entweder TRUE oder FALSE zurückgibt, je nachdem ob $children FALSE ein leeres Array ist oder nicht.

 /** * Check if given term has child terms * * @param Integer $term_id * @param String $taxonomy * * @return Boolean */ function category_has_children( $term_id = 0, $taxonomy = 'category' ) { $children = get_categories( array( 'child_of' => $term_id, 'taxonomy' => $taxonomy, 'hide_empty' => false, 'fields' => 'ids', ) ); return ( $children ); } 

Wenn Sie also nur die integrierten post Kategorien verwenden, können Sie die function wie folgt aufrufen: category_has_children( 17 );

Wenn Sie eine benutzerdefinierte Taxonomie testen müssen, wird es fast genauso funktionieren. Sie müssen lediglich einen zusätzlichen Parameter ‘taxonomy-slug’ übergeben: category_has_children( 7, 'my_taxonomy' );

Um es in Ihrer IF-statement aufzurufen:

 if( $cat->parent != 0 && ! category_has_children( $cat->term_id ) ) 

Es gibt bereits eine eingebaute function, es ist nicht nötig, eine benutzerdefinierte function dafür zu erstellen. Die function heißt get_term_children() und wird entweder zurückgeben

  • Ein Array von untergeordneten Begriffen, wenn der angegebene Begriff Kinder enthält

  • Ein leeres Array, wenn keine untergeordneten Begriffe gefunden werden

  • WP_Error Objekt, wenn die Taxonomie nicht existiert

get_term_children() dies zu get_term_children() , übergeben Sie get_term_children() in eine function und geben Sie true oder false abhängig vom zurückgegebenen Wert zurück, wenn Sie nur einen booleschen Wert benötigen (wie ein bedingtes Tag).

 function has_term_have_children( $term_id = '', $taxonomy = 'category' ) { // Check if we have a term value, if not, return false if ( !$term_id ) return false; // Get term children $term_children = get_term_children( filter_var( $term_id, FILTER_VALIDATE_INT ), filter_var( $taxonomy, FILTER_SANITIZE_STRING ) ); // Return false if we have an empty array or WP_Error object if ( empty( $term_children ) || is_wp_error( $term_children ) ) return false; return true; } 

Sie können nun einfach die Begriffs-ID an die function und den richtigen Taxonomennamen übergeben, wenn die Taxonomie etwas anderes als category , und Sie erhalten einen boolen-Wert zurück, genauso wie das Build in bedingten Tags, true für Erfolg, wenn der Begriff Kinder hat falsch, wenn nicht.

 if ( has_term_have_children( 21 ) ) { // Do something if term 21 have children } 

Um den Namen der untergeordneten Kategorien zu erhalten. Ich habe die @ Howdy_McGee-function für einen schnelleren und iterativen process verwendet.

 function category_has_children( $term_id = 0, $post_type = 'post', $taxonomy = 'category' ) { $children = get_categories( array( 'child_of' => $term_id, 'type' => $post_type, 'taxonomy' => $taxonomy, 'order' => 'ASC', 'orderby' => 'name' ) ); if($children){ echo ''; } } $cId = get_cat_id('cms'); /* cms is the parent category */ category_has_children($cId, 'post', 'category'); 

Dies listet alle Unterkategorien (untergeordnete Elemente) einer übergeordneten Kategorie auf.

Das ist was ich benutze. Die Variable $ cat ist die Kategorie-ID, die Sie überprüfen:

 $categories = get_categories($cat); if (!empty($categories)) { // This Category has children } else { // This category has no children } 

Verwenden Sie diese function cat_has_subcat('paste cat id') , um zu überprüfen, ob die Kategorie Unterkategorien hat oder nicht

 //paste it in your function.php //start function cat_has_subcat($catId){ $args = array( 'taxonomy' => 'product_cat', 'orderby' => 'name', 'parent' => $catId, 'show_count' => 0, 'pad_counts' => 0, 'hierarchical' => 1, 'title_li' => '', 'hide_empty' => false ); $cats = get_categories($args); if(!empty($cats)){ return $catId; } } //end