जवाबों:
$wp_query->get_queried_object()
आपको "वर्तमान में queried ऑब्जेक्ट" देगा। एक श्रेणी संग्रह पर यह श्रेणी वस्तु है, एक लेखक पृष्ठ पर यह लेखक है, एक ही पोस्ट पर यह स्वयं पोस्ट है, ... ठीक है, आपको विचार मिलता है। अगर आप केवल आईडी चाहते हैं तो आप भी उपयोग कर सकते हैं $wp_query->get_queried_object_id()
।
मेरी खोज के आधार पर आपको इसका उपयोग करना चाहिए:
$category = get_queried_object();
echo $category->term_id;
उम्म, मैं अभी तक टिप्पणी नहीं कर सकता, लेकिन वाइसप्रेज़ का जवाब काम करता है। निम्नलिखित एक श्रेणी आर्काइव पेज पर ठीक काम करता है (हालाँकि आप शायद इसे इको करने के अलावा कुछ करना चाहते हैं):
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
संपादित करें: स्क्रैच कि, यह मेरे लिए तब तक काम करता था जब तक कि मैं एक ऐसी श्रेणी में नहीं आया था जिसमें एक पद नहीं था, फिर इसने मुख्य श्रेणी के बजाय उपश्रेणी को उठाया। आप श्रेणी टेम्पलेट पृष्ठ पर get_the_category पर भरोसा नहीं कर सकते ।
जब तक मैं प्रश्न को गलत नहीं समझ रहा हूं, मुझे लगता है कि आप बॉडी क्लास में श्रेणी आईडी / स्लग भी जोड़ सकते हैं:
<?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()
, क्योंकि पिछले उदाहरण में यह हमेशा आपको बी की श्रेणी पृष्ठ के अंदर होने पर आपको बी की जानकारी प्राप्त करेगा।
आप ऐसा करने के 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 = 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) का उपयोग कर रहे हैं , तो उन सभी श्रेणियों को प्राप्त करने के लिए अन्य तरीके काम करते हैं, जो "कैट" या "श्रेणी_नाम" में उत्तीर्ण की गई हैं।
एकमात्र तरीका जो मैंने पाया है वह है डेटा को निम्न से खींचना:
$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 (,) ऑपरेटरों का उपयोग करते समय कुछ विचार करने की आवश्यकता है।