วิธีรับ Slug หมวดหมู่หลักของโพสต์ปัจจุบัน


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

รหัสด้านบนจะส่งคืน "สุนัข" หากคุณให้รหัสสำหรับ "Scooby" หากคุณต้องการหมวดหมู่ผู้ปกครองสูงสุด - "การ์ตูน" - ไม่ว่ารังจะลึกแค่ไหนให้ใช้สิ่งนี้:

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