wake-up-neo.com

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

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' ) {
3

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 ) )
3
Howdy_McGee

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
}
5
Pieter Goosen

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.

0
Shreyo Gi

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
    }
0
Randy Kilwag

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
0
Sudip Debnath