현재 게시물의 상위 카테고리 슬러그를 얻는 방법


12

내 테마에는 다음 코드를 사용하여 범주별로 스타일이 적용되어 현재 범주의 슬러그를 CSS 클래스로 삽입합니다.

<div class="CategorySpecificStyle 
    <?php $category = get_the_category(); echo $category[0]->slug; ?>">
        <?php echo $category[0]->cat_name; ?>
</div> 

이제 많은 수의 새로운 하위 카테고리를 추가하려고합니다. 현재 게시물의 상위 카테고리를 선택하고 스타일을 적용 할 수있을 때 CSS에 모두 추가하는 것은 어리석은 것처럼 보입니다.

부모 카테고리의 이름을 얻을 수있었습니다.

$parentcat = get_cat_name($category[0]->category_parent);

그러나 공백 (및 대문자)은 문제입니다 ... 그리고 나는 부모 범주의 슬러그를 얻을 수없는 것 같습니다.

어딘가에 간단한 단계가 빠져있을 수도 있지만 모든 통찰력을 높이 평가할 것입니다.

답변:


18

에서 반환 한 ID 값을 사용하여 $category[0]->category_parent전달해야합니다 get_term(). 예:

$category = get_the_category(); 
$category_parent_id = $category[0]->category_parent;
if ( $category_parent_id != 0 ) {
    $category_parent = get_term( $category_parent_id, 'category' );
    $css_slug = $category_parent->slug;
} else {
    $css_slug = $category[0]->slug;
}

5

상위 카테고리 데이터를 쿼리해야합니다. get_category그렇게하기 위해 만들어졌습니다.

$category = get_the_category(); 
$parent = get_category($category[0]->category_parent);
echo $parent->slug;

카테고리의 직계 부모를 반환합니다. 다음과 같은 범주가 제공됩니다.

  • 만화
      • 스쿠비

위 코드는 "Scooby"의 ID를 제공하면 "Dog"을 반환합니다. 중첩 수준에 관계없이 최상위 범주 인 "만화"를 원하면 다음과 같이 사용하십시오.

$category = get_the_category(); 
$parent = get_ancestors($category[0]->term_id,'category');
if (empty($parent)) {
  $parent[] = array($category[0]->term_id);
}
$parent = array_pop($parent);
$parent = get_category($parent); 
if (!is_wp_error($parent)) {
  var_dump($parent);
} else {
  echo $parent->get_error_message();
}

또한 비교적 깔끔한 오류 처리라는 이점이 있습니다.


답변 주셔서 감사합니다, 나중에 비슷한 스 니펫을 사용할 수 있지만 하위 카테고리가없는 상위 카테고리 / 카테고리의 게시물 인 경우 오류가 발생합니다.
DLR

@DLR : 예, 알고 있습니다. 나는 대답을 완성하기 전에 떠나야했다. 나는 더 복잡하고 더 강력한 무언가를 연구하고있었습니다. 편집 내용을 참조하십시오.
s_ha_dum

0

나는 @s_ha_dum의 이전 답변을 좋아하지만 깊이에 관계없이 최상위 카테고리를 얻는 데 더 간단한 솔루션이라고 생각한 것을 사용했습니다.

$cats = get_the_category();
foreach ( $cats as $cat ) {
    if ( $cat->category_parent == 0 ) {
        return $cat->name; // ...or whatever other attribute/processing you want
    }
}
return ''; // This was from a shortcode; adjust the return value to taste

0

그것은 누군가를 도울 수 있다면 ...에 따라, 아동 고양이 또는 부모를 얻을 수 있습니다 0또는 1당신은에 넣어$category

$category = get_the_category();
$parent = get_cat_name( $category[0]->category_parent );
if( ! function_exists('get_cat_slug') )
{
    function get_cat_slug($cat_id) {
        $cat_id = (int) $cat_id;
        $category = &get_category($cat_id);
        return $category->slug;
    }
}
if ( !empty($parent) ) {
    $output .= '<H2>' . esc_html( $category[1]->name ) . '</H2>';                               
} else {
    $output .= '<H2>' . esc_html( $category[0]->name ) . '</H2';
}

0

다음과 같이 단순화 할 수 있습니다.

  $category   = get_the_category();
  $cat_parent = $category[0]->category_parent;
  $category   = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;

0

다음 함수는 루트 범주 를 반환하도록 조정되었습니다 .

function get_root_category($category = null) {
  if (!$category) $category = get_the_category()[0];
  $ancestors = get_ancestors($category->term_id, 'category');
  if (empty($ancestors)) return $category;
  $root = get_category(array_pop($ancestors)); 
  return $root;
}

용법: get_root_category()->slug

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