Verifique se a categoria atual tem subcategorias

3

Encontrei o seguinte trecho de código no WP Knowledge Base tema, a fim de mostrar subcategorias de uma categoria pai. O problema é que isso só funciona para o primeiro nível de hierarquia, então eu queria mudar a cláusula if para verificar se a categoria atual tem filhos, mas não tenho ideia de como fazer isso, alguma idéia? Obrigado

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' ) {
    
por Joaquín L. Robles 28.01.2015 / 15:50

5 respostas

3

Você poderia usar essa chamada de função simples que retorna TRUE ou FALSE , dependendo de se $children é uma matriz vazia ou não.

/**
 * 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 );
}

Se você estiver usando apenas as categorias post internas, poderá chamar a função da seguinte forma: category_has_children( 17 );

Se você precisar testar uma taxonomia personalizada, ela funcionará quase da mesma forma, você só precisará passar um parâmetro extra 'taxonomy-slug': category_has_children( 7, 'my_taxonomy' ); '

Para chamá-lo na sua declaração IF:

if( $cat->parent != 0 && ! category_has_children( $cat->term_id ) )
    
por Howdy_McGee 28.01.2015 / 16:09
5

Já existe uma função build para isso, não é necessário criar uma função personalizada para isso. A função é chamada de get_term_children() e retornará

  • Uma matriz de termos filhos se o termo determinado tiver filhos

  • Uma matriz vazia se nenhum termo filho for encontrado

  • WP_Error object se a taxonomia não existir

Com isso em mente, agrupe get_term_children() em uma função e retorne true ou false dependendo do valor retornado se você precisar apenas de um valor booleano (como uma tag condicional)

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

Você pode simplesmente passar o termo id para a função e o nome correto da taxonomia se a taxonomia for diferente de category , e você obterá um valor de boolen de volta apenas como a construção em tags condicionais, true em sucesso se o termo tiver filhos, falso se não tiver.

if ( has_term_have_children( 21 ) ) {
    // Do something if term 21 have children
}
    
por Pieter Goosen 24.06.2015 / 09:35
0

Para obter o nome das categorias filho. Eu usei a função @ Howdy_McGee para um & processo iterativo.

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');

Isso listará toda a subcategoria (filho) de uma categoria pai.

    
por Shreyo Gi 28.01.2015 / 17:35
0

Isso é o que eu uso. A variável $ cat é o ID da categoria que você está verificando:

$categories = get_categories($cat);

if (!empty($categories)) {
    // This Category has children
    }
else {
    // This category has no children
    }
    
por Randy Kilwag 24.06.2015 / 08:40
0

Use esta função cat_has_subcat('paste cat id') para verificar se a categoria possui ou não subcategorias

//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
    
por Sudip Debnath 09.11.2017 / 07:53