Làm thế nào để có được danh mục phụ huynh Slug của bài hiện tại


12

Chủ đề của tôi có kiểu dáng theo thể loại bằng cách sử dụng đoạn mã sau, trong đó chèn slug của danh mục hiện tại dưới dạng một lớp CSS.

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

Bây giờ tôi sắp thêm một số lượng lớn các danh mục phụ mới và có vẻ thật ngớ ngẩn khi thêm tất cả chúng vào CSS khi tôi có thể chỉ cần chọn danh mục chính của bài đăng hiện tại và áp dụng các kiểu cho điều đó.

Tôi đã có thể có được tên của danh mục cha mẹ:

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

Nhưng không gian (và viết hoa) là một vấn đề ... Và dường như tôi không thể có được sên của danh mục phụ huynh.

Tôi biết có lẽ tôi đang thiếu một bước đơn giản ở đâu đó, nhưng bất kỳ cái nhìn sâu sắc nào cũng sẽ được đánh giá cao.

Câu trả lời:


18

Bạn sẽ cần sử dụng giá trị ID được trả về $category[0]->category_parentvà chuyển qua get_term(). Thí dụ:

$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

Bạn sẽ cần truy vấn dữ liệu danh mục chính. get_categoryđược xây dựng khá nhiều để làm điều đó.

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

Điều đó sẽ trả về cha mẹ ngay lập tức của thể loại. Điều đó được đưa ra bộ danh mục này:

  • Hoạt hình
    • Chó
      • Scooby

Mã ở trên sẽ trả về "Dog" nếu bạn cung cấp ID cho "Scooby". Nếu bạn muốn loại cha mẹ trên cùng - "Phim hoạt hình" - cho dù việc lồng nhau sâu đến đâu, hãy sử dụng cái gì đó như thế này:

$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();
}

Điều đó cũng có ưu điểm là xử lý lỗi tương đối gọn gàng.


Cảm ơn câu trả lời và tôi có thể sẽ sử dụng một đoạn tương tự trong tương lai, nhưng nó cũng sẽ gây ra lỗi nếu bài đăng trong danh mục / danh mục chính không có danh mục phụ.
DLR

@DLR: Vâng, tôi biết. Tôi phải rời đi trước khi tôi có thể hoàn thành câu trả lời. Tôi đã làm việc trên một cái gì đó phức tạp hơn và mạnh mẽ hơn. Xem chỉnh sửa.
s_ha_dum

0

Tôi thích câu trả lời trước từ @s_ha_dum, nhưng để có được danh mục cấp cao nhất bất kể độ sâu, tôi đã sử dụng những gì tôi cho là một giải pháp đơn giản hơn:

$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

Nếu nó có thể giúp ai đó ... lấy mèo con hoặc bố mẹ, tùy thuộc vào 0hoặc 1bạn đặt$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

Bạn có thể đơn giản hóa nó như thế này:

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

0

Hàm sau được điều chỉnh để trả về danh mục gốc :

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

Sử dụng: get_root_category()->slug

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.