श्रेणी टेम्पलेट के अंदर श्रेणी आईडी प्राप्त करें


22

मैं टेम्पलेट के अंदर कैट आईडी कैसे प्राप्त करूं। बहुत महत्वपूर्ण: मैं इसे नाम से नहीं कर सकता, क्योंकि हमारे पास एक ही नाम के साथ मुल्ट बिल्लियों हैं। केवल स्लग अलग है। अगर मुझे स्लग मिलता है, तो यह ठीक होगा। लेकिन जैसा मैंने कहा: मैं बिल्ली शीर्षक का उपयोग नहीं कर सकता .....

जवाबों:


40

$wp_query->get_queried_object()आपको "वर्तमान में queried ऑब्जेक्ट" देगा। एक श्रेणी संग्रह पर यह श्रेणी वस्तु है, एक लेखक पृष्ठ पर यह लेखक है, एक ही पोस्ट पर यह स्वयं पोस्ट है, ... ठीक है, आपको विचार मिलता है। अगर आप केवल आईडी चाहते हैं तो आप भी उपयोग कर सकते हैं $wp_query->get_queried_object_id()


9

मेरी खोज के आधार पर आपको इसका उपयोग करना चाहिए:

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

मुझे लगता है कि आपने नीचे की ओर प्राप्त किया क्योंकि आप यह नहीं समझा रहे हैं कि यह क्यों मदद करता है, बस यह बताते हुए कि यह करता है। आप उस फ़ंक्शन के स्रोत का निरीक्षण करना चाहते हैं और अपने उत्तर के रूप में अपने आउटकमिंग्स को जोड़ सकते हैं। संकेत: यदि किसी टिप्पणी को आपके उत्तर से अधिक लंबा होना चाहिए, तो यह एक टिप्पणी होनी चाहिए थी :)
kaiser

7

उम्म, मैं अभी तक टिप्पणी नहीं कर सकता, लेकिन वाइसप्रेज़ का जवाब काम करता है। निम्नलिखित एक श्रेणी आर्काइव पेज पर ठीक काम करता है (हालाँकि आप शायद इसे इको करने के अलावा कुछ करना चाहते हैं):

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

संपादित करें: स्क्रैच कि, यह मेरे लिए तब तक काम करता था जब तक कि मैं एक ऐसी श्रेणी में नहीं आया था जिसमें एक पद नहीं था, फिर इसने मुख्य श्रेणी के बजाय उपश्रेणी को उठाया। आप श्रेणी टेम्पलेट पृष्ठ पर get_the_category पर भरोसा नहीं कर सकते


यह एक व्यवहार्य समाधान नहीं है क्योंकि यह उस श्रेणी पृष्ठ पर सभी पदों के लिए सभी श्रेणियों को लौटाता है। आपका गूँजता हुआ परिणाम सूची में नवीनतम पोस्ट की प्रारंभिक श्रेणी देता है।
cj5

4

जब तक मैं प्रश्न को गलत नहीं समझ रहा हूं, मुझे लगता है कि आप बॉडी क्लास में श्रेणी आईडी / स्लग भी जोड़ सकते हैं:

<?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(), क्योंकि पिछले उदाहरण में यह हमेशा आपको बी की श्रेणी पृष्ठ के अंदर होने पर आपको बी की जानकारी प्राप्त करेगा।


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>';
?>

लौटाई गई वस्तुओं की सरणी देखने के लिए।


प्रश्न 'मुझे टेम्प्लेट के अंदर कैट आईडी कैसे मिलता है' अलग व्याख्या के लिए खुला है। एक ही पोस्ट टेम्पलेट के भीतर, आप सही हैं। यह लूप के अंदर काम करता है ताकि किसी एक पद की श्रेणियां प्राप्त कर सकें; हालांकि, get_the_category()श्रेणी आईडी प्राप्त करने के लिए एक श्रेणी संग्रह पृष्ठ में काम नहीं करेगा, परिणाम मनमाना होगा।
माइकल

@ मिचेल सच कहते हैं। @ जान को उस विशिष्ट संदर्भ के संबंध में अधिक उपयुक्त उत्तर दिया गया लगता है।
वाइसप्रेज़

1
get_the_category()श्रेणी के अंदर काम करता है।
एफपी

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) का उपयोग कर रहे हैं , तो उन सभी श्रेणियों को प्राप्त करने के लिए अन्य तरीके काम करते हैं, जो "कैट" या "श्रेणी_नाम" में उत्तीर्ण की गई हैं।

एकमात्र तरीका जो मैंने पाया है वह है डेटा को निम्न से खींचना:

$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 (,) ऑपरेटरों का उपयोग करते समय कुछ विचार करने की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.