Verifique se a categoria atual tem filhos

11

Preciso dizer se a página do arquivo de taxonomia personalizada atual que estou visualizando tem ou não categorias filhas. Eu tenho uma situação onde há muitas categorias personalizadas com crianças e o site é apenas para mostrar posts no final da linha. Caso contrário, deve mostrar um link para a categoria que é o próximo passo abaixo. Eu encontrei este trecho, mas não parece funcionar para taxonomias personalizadas.

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
    }
?>
    
por user29489 28.03.2013 / 17:47

3 respostas

8

Pode ou não haver uma maneira melhor de fazer isso, mas aqui está como eu faria:

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

Se o termo de taxonomia atual tiver filhos, a função get_terms retornará uma matriz, caso contrário, ela retornará false .

Testado e funciona em minha instalação local com UI de tipo de postagem personalizada usada para Geração CPT.

    
por montrealist 28.03.2013 / 18:34
8

Há também uma possibilidade genérica de WP para fazer isso via get_term_children .

<?php
$children = get_term_children($termId, $taxonomyName);

if( empty( $children ) ) {
    //do something here
}
    
por simonthesorcerer 12.12.2013 / 14:32
0

Supondo que você está tentando filtrar seus termos para mostrar apenas os termos que têm filhos ou não, é possível usar o parâmetro childless na sua função get_terms() .

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

Isso gerará uma matriz de termos que não têm filhos.

    
por Frits 20.05.2016 / 11:37