वर्तमान पोस्ट के माता-पिता श्रेणी स्लग कैसे प्राप्त करें


13

मेरी थीम में निम्नलिखित कोड का उपयोग करके श्रेणी के अनुसार स्टाइलिंग है, जो कि सीएसएस वर्ग के रूप में वर्तमान श्रेणी के स्लग को सम्मिलित करता है।

<div class="CategorySpecificStyle 
    <?php $category = get_the_category(); echo $category[0]->slug; ?>">
        <?php echo $category[0]->cat_name; ?>
</div> 

अब मैं बड़ी संख्या में नई उप-श्रेणियां जोड़ने जा रहा हूं, और सीएसएस में उन सभी को जोड़ना मूर्खतापूर्ण लगता है जब मुझे वर्तमान पोस्ट की मूल श्रेणी का चयन करने और उस पर शैलियों को लागू करने में सक्षम होना चाहिए।

मैं मूल श्रेणी का नाम प्राप्त करने में सक्षम हूं:

$parentcat = get_cat_name($category[0]->category_parent);

लेकिन रिक्त स्थान (और पूंजीकरण) एक मुद्दा है ... और मैं मूल श्रेणी का स्लग प्राप्त नहीं कर सकता।

मुझे पता है कि मुझे शायद एक सरल कदम याद आ रहा है, लेकिन किसी भी अंतर्दृष्टि की बहुत सराहना की जाएगी।

जवाबों:


19

आपको इसके द्वारा लौटाए गए आईडी मान का उपयोग करना होगा $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;

वह श्रेणी के तत्काल जनक को लौटा देगा। यह श्रेणियों का यह सेट दिया गया है:

  • कार्टून
    • कुत्ता
      • स्कूबी

यदि आप इसे "स्कूबी" के लिए आईडी देते हैं तो उपरोक्त कोड "डॉग" वापस आ जाएगा। यदि आप सबसे ऊपरी मूल श्रेणी चाहते हैं - "कार्टून" - घोंसले के शिकार चाहे जितना गहरा हो, इस तरह से कुछ का उपयोग करें:

$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

@ डीएलआर: हां, मुझे पता है। जवाब पूरा करने से पहले मुझे छोड़ना पड़ा। मैं कुछ अधिक जटिल और अधिक मजबूत काम कर रहा था। संपादन देखें।
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

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