รับ ID หมวดหมู่ภายในเทมเพลตหมวดหมู่


22

ฉันจะรับ cat ID ภายในเทมเพลตได้อย่างไร สำคัญมาก: ฉันไม่สามารถทำได้ด้วยชื่อเพราะเรามีแมวหลายตัวที่มีชื่อเหมือนกัน กระสุนเท่านั้นจะแตกต่างกัน ถ้าฉันรับกระสุนมันก็โอเคเช่นกัน แต่อย่างที่ฉันพูด: ฉันไม่สามารถใช้ชื่อแมว .....

คำตอบ:


40

$wp_query->get_queried_object()จะให้ "วัตถุที่ถูกสืบค้นในขณะนี้" แก่คุณ ในการเก็บถาวรหมวดหมู่นี่คือวัตถุหมวดหมู่ในหน้าผู้เขียนนี่คือผู้เขียนในการโพสต์เดียวนี่คือการโพสต์ตัวเอง ... ดีคุณจะได้รับความคิด ถ้าคุณต้องการเฉพาะ ID $wp_query->get_queried_object_id()ที่คุณยังสามารถใช้


9

จากการค้นหาของฉันคุณต้องใช้สิ่งนี้:

$category = get_queried_object();
echo $category->term_id;

ฉันถือว่าคุณได้รับ downvote เพราะคุณไม่ได้อธิบายว่าทำไมมันถึงช่วยได้เพียงแค่ระบุว่าสิ่งนี้ทำ คุณอาจต้องการตรวจสอบแหล่งที่มาของฟังก์ชั่นนั้นและเพิ่มความโด่งดังของคุณเพื่อแก้ไขคำตอบของคุณ คำแนะนำ: ถ้าความคิดเห็นจะต้องมีความยาวเกินกว่าคำตอบของคุณแล้วมันควรจะได้รับความคิดเห็น :)
Kaiser

7

อืมฉันยังไม่สามารถออกความเห็นได้ แต่คำตอบของ VicePrez ใช้งานได้ การทำงานต่อไปนี้ใช้ได้กับหน้าหมวดหมู่การเก็บถาวร (แม้ว่าคุณอาจต้องการทำสิ่งอื่นนอกเหนือจากการสะท้อน)

<?php
$category = get_the_category(); 
echo $category[0]->cat_ID;
?>

แก้ไข:เกาว่ามันทำงานให้ฉันจนกว่าฉันจะเจอหมวดหมู่ที่ไม่มีโพสต์จากนั้นก็เลือกหมวดหมู่ย่อยแทนที่จะเป็นหมวดหมู่หลัก คุณไม่สามารถพึ่งพา get_the_category ในหน้าเทมเพลตหมวดหมู่ได้


นี่ไม่ใช่โซลูชันที่ทำงานได้เนื่องจากจะส่งคืนหมวดหมู่ทั้งหมดสำหรับโพสต์ทั้งหมดในหน้าหมวดหมู่นั้น ผลลัพธ์ที่สะท้อนของคุณจะส่งคืนหมวดหมู่เริ่มต้นของโพสต์ล่าสุดในรายการ
cj5

4

ถ้าฉันไม่เข้าใจคำถามฉันคิดว่าคุณสามารถเพิ่มหมวดหมู่ id / กระสุนลงในคลาสของร่างกายได้:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>

4

@Jan Fabry การตอบกลับเป็นคำตอบที่ถูกต้องนี่คือสาเหตุ: เนื่องจาก Wordpress อนุญาตให้โพสต์หลายหมวดหมู่สำหรับการโพสต์การใช้$category = get_the_category()และการสืบค้น$category[0]จะไม่ทำงานในทุกกรณีเนื่องจากสิ่งที่คุณกำลังทำจริง ๆ ลองนึกภาพคุณมีหมวดหมู่ A, B และ C หากคุณมีเพียงโพสต์เดียวมันมีหมวดหมู่ A และ B และคุณอยู่ในหน้าหมวดหมู่ของ B คุณอาจท้ายด้วยข้อมูลของ A แทน

นั่นเป็นเหตุผลที่ดีกว่าที่จะใช้$category = $wp_query->get_queried_object()เพราะในตัวอย่างก่อนหน้ามันจะทำให้คุณได้รับข้อมูลของ B เสมอเมื่อคุณอยู่ในหน้าหมวดหมู่ของ B


2

คุณสามารถใช้get_the_category()เพื่อทำเช่นนั้น

ตัวอย่าง:

<?php

$category = get_the_category(); 

// use this to echo the slug
echo $category[0]->slug;

// use this to echo the cat id
echo $category[0]->cat_ID;

// if you've got multiple categories you can run a foreach loop like so
foreach ( $category as $cat ) :

    echo '<li>' . $cat->name . '</li>';

endforeach;

?>

คุณสามารถใช้:

<?php
    echo '<pre>';
    print_r($category);
    echo '</pre>';
?>

เพื่อดูอาร์เรย์ของวัตถุที่ส่งคืน


คำถาม 'ฉันจะได้รับ cat id ภายในเทมเพลต' เปิดให้ตีความต่างกันได้อย่างไร ภายในเทมเพลตโพสต์เดียวคุณพูดถูก มันทำงานภายในลูปเพื่อรับหมวดหมู่ของโพสต์เดียว อย่างไรก็ตามget_the_category()จะไม่ทำงานในหน้าเก็บถาวรหมวดหมู่เพื่อรับรหัสหมวดหมู่ผลลัพธ์จะเป็นไปตามอำเภอใจ
Michael

@Michael พูดจริง @Jan ดูเหมือนจะให้คำตอบที่เหมาะสมมากขึ้นเกี่ยวกับบริบทเฉพาะนั้น
VicePrez

1
get_the_category()ทำงานภายใน category.php
Lea Cohen

0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);

1
โปรดอธิบายสาเหตุที่สามารถแก้ปัญหาได้ ข้อมูลโค้ดไม่ใช่คำตอบ
fuxia

0

ตัวอย่างด้านบนส่วนใหญ่ทำงานได้ แต่ถ้าคุณใช้หลายประเภท NONE (เช่นการเขียน, WP เวอร์ชั่น 3.6)ของวิธีการอื่นจะทำงานเพื่อให้ได้หมวดหมู่ทั้งหมดที่ผ่านไปยัง "cat" หรือ "category_name"

วิธีเดียวที่ฉันได้พบคือการดึงข้อมูลจาก:

$wp_query->query['category_name']

ด้วยเหตุผลบางอย่างสิ่งนี้จะคืนค่าที่แตกต่างget_query_var( 'category_name' )ซึ่งจะส่งกลับเฉพาะหมวดหมู่แรกเท่านั้น

เมื่อใช้หลายหมวดหมู่คุณจะต้องใช้ฟังก์ชั่นบางอย่างexplodeเพื่อรับชุดกระสุนหมวดหมู่จากนั้นวนซ้ำเพื่อคว้ารหัสทั้งหมด:

<?php
global $wp_query;

//grab all categories from query string (if using `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));

$categories = array();
$category_ids = array();

//loop through all the slugs
foreach($category_slugs_array as $category_slug)
{
    //get category object using slug
    $category = get_category_by_slug( $category_slug );

    //check to make sure a matching category has been found
    if(isset($category->cat_ID))
    {
        $categories[] = $category;
        $category_ids[] = $category->cat_ID;
    }
}

var_dump($categories); //array of categories
var_dump($category_ids); //array of category IDs

?>

เห็นได้ชัดว่าจำเป็นต้องมีข้อควรพิจารณาบางประการเมื่อใช้ตัวดำเนินการ AND (+) หรือ OR (,)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.