Verifique se a categoria atual tem filhos


11

Preciso dizer se a página atual do arquivo de taxonomia personalizada que estou visualizando tem ou não categorias filho. Eu tenho uma situação em que há muitas categorias personalizadas com filhos e o site é apenas para mostrar postagens no final da linha. Caso contrário, ele deve mostrar um link para a categoria que é o próximo passo abaixo. Encontrei esse snippet, mas ele 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
    }
?>

Respostas:


10

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

$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 atual da taxonomia tiver filhos, a get_termsfunção retornará uma matriz, caso contrário, retornará false.

Testado e funciona na minha instalação local de baunilha com o plugin Custom Post Type UI usado para geração de CPT.


Quando eu descomentei o print_r ($ children) .... ele produziu uma matriz. Como isso poderia ser transformado em um if / else? Desculpe, eu ainda sou muito novo no php #
31293

1
Desconsidere, usei isso: if ($ children) {echo 'Children Here'; } else {echo 'Sem filhos'; }
user29489

@ user29489 Você está certo, eu não fui clara o suficiente na minha resposta. Editado para referência futura.
montrealist

1
Para aqueles que precisam apenas saber se há filhos e não precisam obter os dados para os termos do filho, sugiro adicionar 'field' => 'count'apenas para contar o número de filhos.
perfil

Isso funciona também com categorias normais de postagem?
Pete

9

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

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

if( empty( $children ) ) {
    //do something here
}

1

Supondo que você esteja tentando filtrar seus termos para mostrar apenas termos que tenham filhos ou não, você poderá realmente usar o childlessparâmetro em sua get_terms()função.

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

Isso produzirá uma variedade de termos que não têm filhos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.