Geçerli Yazının Ana Kategori Slug Nasıl Gidilir


13

Temam, geçerli kategorinin fişini CSS sınıfı olarak ekleyen aşağıdaki kodu kullanarak kategoriye göre şekillendirmeye sahip.

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

Şimdi çok sayıda yeni alt kategori eklemek üzereyim ve sadece geçerli yazının üst kategorisini seçip stilleri uygulayabilmem gerektiğinde hepsini CSS'ye eklemek aptalca görünüyor.

Ana kategorinin adını edinebildim:

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

Ama boşluklar (ve büyük harf kullanımı) bir konudur ... Ve ana kategorinin sümüklübesini alamıyorum.

Muhtemelen bir yerde basit bir adımı atlamadığımı biliyorum, ama herhangi bir fikir çok takdir edilecektir.

Yanıtlar:


19

Tarafından döndürülen kimlik değerini kullanmanız $category[0]->category_parentve iletmeniz gerekir get_term(). Misal:

$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

Üst kategori verilerini sorgulamanız gerekir. get_categorybunu yapmak için yapılmış.

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

Bu, kategorinin hemen üst öğesini döndürür. Bu kategoriler kümesi verilir:

  • Karikatür
    • Köpek
      • Scooby

Eğer "Scooby" kimliğini verirseniz yukarıdaki kod "Dog" döndürecektir. En üst ebeveyn kategorisini istiyorsanız - "Karikatür" - yuvalama ne kadar derin olursa olsun, böyle bir şey kullanın:

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

Bu aynı zamanda nispeten düzgün hata işleme avantajına sahiptir.


Cevabınız için teşekkürler ve muhtemelen benzer bir snippet'i gelecekte kullanacağım, ancak alt kategoriler olmadan bir ana kategoride / kategoride yayın varsa da hatalar atar.
DLR

@DLR: Evet, biliyorum. Cevabı tamamlayabilmek için ayrılmak zorunda kaldım. Daha karmaşık ve daha sağlam bir şey üzerinde çalışıyordum. Düzenlemeye bakın.
s_ha_dum

0

@S_ha_dum'dan önceki cevabı beğendim, ancak derinlik ne olursa olsun üst düzey kategoriyi elde etmek için daha basit bir çözüm olarak düşündüğüm şeyi kullandım:

$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

Birini yardımcı olabilir ... bağlı olarak çocuk kedi ya da ebeveyn olsun 0ya 1sen koymak$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

Bunu şöyle basitleştirebilirsiniz:

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

0

Kök kategorisini döndürmek için aşağıdaki işlev uyarlanmıştır :

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

Kullanımı: get_root_category()->slug

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.