Ich habe den folgenden Code im Thema WP Knowledge Base gefunden, um Unterkategorien einer übergeordneten Kategorie anzuzeigen. Das Problem ist, dass dies nur für die erste Hierarchieebene funktioniert. Daher wollte ich die if-Klausel ändern, um zu überprüfen, ob die aktuelle Kategorie untergeordnete Elemente enthält, aber ich habe keine Ahnung, wie das geht. 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' ) {
Sie können diesen einfachen Funktionsaufruf verwenden, der entweder TRUE
oder FALSE
zurückgibt, je nachdem, ob $children
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 Kategorien für post
verwenden, können Sie die Funktion folgendermaßen aufrufen: category_has_children( 17 );
Wenn Sie eine benutzerdefinierte Taxonomie testen müssen, funktioniert sie fast genauso. Sie müssen lediglich einen zusätzlichen Parameter 'taxonomy-slug' übergeben: category_has_children( 7, 'my_taxonomy' );
'
So rufen Sie es in Ihrer IF-Anweisung auf:
if( $cat->parent != 0 && ! category_has_children( $cat->term_id ) )
Es gibt bereits eine eingebaute Funktion, für die keine benutzerdefinierte Funktion erstellt werden muss. Die Funktion heißt get_term_children()
und wird entweder zurückgegeben
Ein Array von untergeordneten Begriffen, wenn der angegebene Begriff untergeordnete Elemente enthält
Ein leeres Array, wenn keine untergeordneten Begriffe gefunden werden
WP_Error
Objekt, wenn die Taxonomie nicht existiert
In diesem Sinne sollten Sie get_term_children()
in eine Funktion einschließen und je nach dem zurückgegebenen Wert true oder false zurückgeben, 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 jetzt einfach nur die Term-ID an die Funktion und den korrekten Taxonomienamen übergeben, wenn die Taxonomie eine andere als category
ist, und Sie erhalten einen boolen Wert zurück, genau wie die eingebauten bedingten Tags. Dies ist bei Erfolg der Fall, wenn der Term Kinder hat , false wenn nicht.
if ( has_term_have_children( 21 ) ) {
// Do something if term 21 have children
}
So rufen Sie den Namen der untergeordneten Kategorien ab Ich habe die @ Howdy_McGee-Funktion für einen schnelleren und iterativen Prozess 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 '<ul>';
foreach ($children as $value) {
echo '<li>';
echo '<a href="'.get_bloginfo("siteurl").'/category/'.$value->slug.'" >'.$value->name.'</a>';
echo '</li>';
}
echo '</ul>';
}
}
$cId = get_cat_id('cms'); /* cms is the parent category */
category_has_children($cId, 'post', 'category');
Dadurch werden alle Unterkategorien (untergeordnete Kategorien) einer übergeordneten Kategorie aufgelistet.
Das ist was ich benutze. Die Variable $ cat ist die Kategorie, wenn Sie überprüfen:
$categories = get_categories($cat);
if (!empty($categories)) {
// This Category has children
}
else {
// This category has no children
}
Verwenden Sie diese Funktion 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