ฉันจะรับ cat ID ภายในเทมเพลตได้อย่างไร สำคัญมาก: ฉันไม่สามารถทำได้ด้วยชื่อเพราะเรามีแมวหลายตัวที่มีชื่อเหมือนกัน กระสุนเท่านั้นจะแตกต่างกัน ถ้าฉันรับกระสุนมันก็โอเคเช่นกัน แต่อย่างที่ฉันพูด: ฉันไม่สามารถใช้ชื่อแมว .....
ฉันจะรับ cat ID ภายในเทมเพลตได้อย่างไร สำคัญมาก: ฉันไม่สามารถทำได้ด้วยชื่อเพราะเรามีแมวหลายตัวที่มีชื่อเหมือนกัน กระสุนเท่านั้นจะแตกต่างกัน ถ้าฉันรับกระสุนมันก็โอเคเช่นกัน แต่อย่างที่ฉันพูด: ฉันไม่สามารถใช้ชื่อแมว .....
คำตอบ:
$wp_query->get_queried_object()
จะให้ "วัตถุที่ถูกสืบค้นในขณะนี้" แก่คุณ ในการเก็บถาวรหมวดหมู่นี่คือวัตถุหมวดหมู่ในหน้าผู้เขียนนี่คือผู้เขียนในการโพสต์เดียวนี่คือการโพสต์ตัวเอง ... ดีคุณจะได้รับความคิด ถ้าคุณต้องการเฉพาะ ID $wp_query->get_queried_object_id()
ที่คุณยังสามารถใช้
จากการค้นหาของฉันคุณต้องใช้สิ่งนี้:
$category = get_queried_object();
echo $category->term_id;
อืมฉันยังไม่สามารถออกความเห็นได้ แต่คำตอบของ VicePrez ใช้งานได้ การทำงานต่อไปนี้ใช้ได้กับหน้าหมวดหมู่การเก็บถาวร (แม้ว่าคุณอาจต้องการทำสิ่งอื่นนอกเหนือจากการสะท้อน)
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
แก้ไข:เกาว่ามันทำงานให้ฉันจนกว่าฉันจะเจอหมวดหมู่ที่ไม่มีโพสต์จากนั้นก็เลือกหมวดหมู่ย่อยแทนที่จะเป็นหมวดหมู่หลัก คุณไม่สามารถพึ่งพา get_the_category ในหน้าเทมเพลตหมวดหมู่ได้
ถ้าฉันไม่เข้าใจคำถามฉันคิดว่าคุณสามารถเพิ่มหมวดหมู่ id / กระสุนลงในคลาสของร่างกายได้:
<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
@Jan Fabry การตอบกลับเป็นคำตอบที่ถูกต้องนี่คือสาเหตุ: เนื่องจาก Wordpress อนุญาตให้โพสต์หลายหมวดหมู่สำหรับการโพสต์การใช้$category = get_the_category()
และการสืบค้น$category[0]
จะไม่ทำงานในทุกกรณีเนื่องจากสิ่งที่คุณกำลังทำจริง ๆ ลองนึกภาพคุณมีหมวดหมู่ A, B และ C หากคุณมีเพียงโพสต์เดียวมันมีหมวดหมู่ A และ B และคุณอยู่ในหน้าหมวดหมู่ของ B คุณอาจท้ายด้วยข้อมูลของ A แทน
นั่นเป็นเหตุผลที่ดีกว่าที่จะใช้$category = $wp_query->get_queried_object()
เพราะในตัวอย่างก่อนหน้ามันจะทำให้คุณได้รับข้อมูลของ B เสมอเมื่อคุณอยู่ในหน้าหมวดหมู่ของ B
คุณสามารถใช้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>';
?>
เพื่อดูอาร์เรย์ของวัตถุที่ส่งคืน
get_the_category()
จะไม่ทำงานในหน้าเก็บถาวรหมวดหมู่เพื่อรับรหัสหมวดหมู่ผลลัพธ์จะเป็นไปตามอำเภอใจ
get_the_category()
ทำงานภายใน category.php
$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;
$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
ตัวอย่างด้านบนส่วนใหญ่ทำงานได้ แต่ถ้าคุณใช้หลายประเภท 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 (,)