Cara Mendapatkan Slug Kategori Induk dari Posting Saat Ini


12

Tema saya memiliki gaya berdasarkan kategori menggunakan kode berikut, yang menyisipkan siput kategori saat ini sebagai kelas CSS.

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

Sekarang saya akan menambahkan sejumlah besar sub-kategori baru, dan tampaknya konyol untuk menambahkan semuanya dalam CSS ketika saya seharusnya bisa memilih kategori induk dari posting saat ini dan menerapkan gaya untuk itu.

Saya bisa mendapatkan nama kategori induk:

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

Tapi spasi (dan kapitalisasi) adalah masalah ... Dan saya sepertinya tidak bisa mendapatkan siput kategori induk.

Saya tahu saya mungkin kehilangan langkah sederhana di suatu tempat, tetapi wawasan apa pun akan sangat dihargai.

Jawaban:


18

Anda harus menggunakan nilai ID yang dikembalikan oleh $category[0]->category_parentdan melewatinya get_term(). Contoh:

$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

Anda perlu meminta data kategori induk. get_categorycukup banyak dibangun untuk melakukan itu.

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

Itu akan mengembalikan induk langsung dari kategori. Itu diberikan serangkaian kategori ini:

  • Kartun
    • Anjing
      • Scooby

Kode di atas akan mengembalikan "Dog" jika Anda memberikan ID untuk "Scooby". Jika Anda ingin kategori induk paling atas - "Kartun" - tidak peduli seberapa dalam sarangnya, gunakan sesuatu seperti ini:

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

Itu juga memiliki keuntungan penanganan kesalahan yang relatif rapi.


Terima kasih atas jawabannya, dan saya kemungkinan akan menggunakan cuplikan serupa di masa mendatang, tetapi juga melempar kesalahan jika memposting dalam kategori induk / kategori tanpa subkategori.
DLR

@ DLR: Ya, saya tahu. Saya harus pergi sebelum saya bisa menyelesaikan jawabannya. Saya sedang mengerjakan sesuatu yang lebih kompleks dan lebih kuat. Lihat hasil edit.
s_ha_dum

0

Saya suka jawaban sebelumnya dari @s_ha_dum, tetapi untuk mendapatkan kategori tingkat atas tanpa memperhatikan kedalaman, saya menggunakan apa yang saya anggap sebagai solusi yang lebih sederhana:

$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

Jika itu dapat membantu seseorang ... untuk mendapatkan anak kucing atau orang tua, tergantung pada 0atau 1Anda memakai$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

Anda dapat menyederhanakannya seperti ini:

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

0

Fungsi berikut disesuaikan untuk mengembalikan kategori root :

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

Pemakaian: get_root_category()->slug

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.