현재 카테고리에 자녀가 있는지 확인


11

보고있는 현재 사용자 정의 분류 아카이브 페이지에 하위 카테고리가 있는지 여부를 말해야합니다. 어린이와 함께 많은 맞춤 카테고리가 있으며 사이트가 줄 끝에 게시물을 표시하는 경우가 있습니다. 그렇지 않으면 다음 단계로 넘어가는 카테고리에 대한 링크가 표시됩니다. 이 스 니펫을 찾았지만 맞춤 분류법에서는 작동하지 않는 것 같습니다.

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

답변:


10

이 작업을 수행하는 더 좋은 방법이있을 수도 있고 아닐 수도 있지만 여기에 내가하는 방법이 있습니다.

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

현재 분류 ​​용어에 자식이 있으면 get_terms함수는 배열을 반환하고 그렇지 않으면를 반환 false합니다.

CPT 생성에 사용되는 Custom Post Type UI 플러그인을 사용 하여 로컬 바닐라 설치에서 테스트 및 작동합니다 .


print_r ($ children) ...의 주석을 해제하면 배열이 출력됩니다. 어떻게 if / else로 바꿀 수 있습니까? 죄송합니다, 나는 여전히 PHP를
처음 접합니다

1
무시한 결과 : if ($ children) {echo 'Children Here'; } else {echo '아동이 없습니다'; }
user29489

@ user29489 당신 말이 맞아요, 내 대답에 충분히 명확하지 않았습니다. 나중에 참조 할 수 있도록 편집되었습니다.
몬트리올리스트

1
자녀가 있는지 여부를 알아야하고 자녀 조건에 대한 데이터를 얻을 필요가없는 'field' => 'count'어린이의 경우 어린이 수를 계산하기 위해 추가 하는 것이 좋습니다 .
JD

일반 게시물 카테고리에서도 작동합니까?
Pete


1

하위 항목이 있거나없는 용어 만 표시하도록 용어를 필터링한다고 가정하면 실제로 함수 에서 childless매개 변수를 사용할 수 get_terms()있습니다.

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

자식이없는 용어 배열이 출력됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.