कस्टम पोस्ट प्रकार आरएसएस में कस्टम फ़ील्ड जोड़ें


17

मैं अपने कस्टम पोस्ट प्रकार में कस्टम फ़ील्ड जोड़ना चाहता हूँ RSS पोस्ट के लिए उस पोस्ट प्रकार के लिए जो http://example.com/feed/?post_type=my_custom_post_type पर स्थित है

मैंने नियमित फ़ीड के लिए ऐसा करने के बारे में जानकारी देखी है, लेकिन कस्टम पोस्ट प्रकार फ़ीड को फिर से लिखने के लिए कुछ भी नहीं है।

मुझे फ़ीड में 10 - 15 आइटम जोड़ना होगा (पहला अधिनियम, दूसरा अधिनियम, तीसरा अधिनियम, मूल्य, खरीद लिंक ...)

जवाबों:


20
function add_custom_fields_to_rss() {
    if(get_post_type() == 'my_custom_post_type' && $my_meta_value = get_post_meta(get_the_ID(), 'my_meta_key', true)) {
        ?>
        <my_meta_value><?php echo $my_meta_value ?></my_meta_value>
        <?php
    }
}
add_action('rss2_item', 'add_custom_fields_to_rss');

आपको स्थानापन्न करने में सक्षम होना चाहिए और किसी भी अन्य मेटा मान को आपको फ़ीड में जोड़ना होगा।


1
इसलिए मुझे प्रत्येक मेटा कुंजी के लिए पोस्ट प्रकार की जांच के लिए एक आइटम जोड़ने की आवश्यकता होगी (शायद लगभग 10) फिर इसे टेम्पलेट में कॉल करें? आप पोस्ट आईडी के साथ मेटा मान क्षेत्र में get_post_meta को कॉल नहीं कर सकते हैं?
करिश्माचल

2
अच्छा उत्तर!
माइकस्किंकेल

@ कर्टिज़मचेल, मैंने बस सबसे सरल उत्तर को शामिल किया। यदि आप उस कई क्षेत्रों में खींच रहे हैं, तो मैं शायद @ mikeschinkel के उत्तर की तरह कुछ स्वरूपित करूँगा।
सुंदरबॉम्प नोव

19

हाय @ कर्टिस्मचेल:

सूअर का बच्चा @ prettyboymp के उत्कृष्ट जवाब है, उस पर मेरी स्पिन के साथ, आपके द्वारा कई कस्टम फ़ील्ड क्या कर सकते हैं (मैं 3 किया था, आप कुछ कर सकते हैं):

add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<{$field}>{$value}</{$field}>\n";
  }
}

पीएस @prettyboymp प्रॉप्स देना सुनिश्चित करें क्योंकि मुझे नहीं पता था कि यह उनके उत्तर से पहले कैसे करना है। मैं सिर्फ इसलिए भी जवाब दे रहा हूं क्योंकि मुझे यकीन नहीं है कि वह लौटने से पहले कितनी देर तक रहेगा इसलिए मैंने तय समय में आपको जवाब देने का फैसला किया।


7

इस बेहतरीन जानकारी के लिए आपको धन्यवाद।

मैं विस्तार करना चाहता था कि अन्य दो ने पहले से ही क्या लिखा है ... इसे मान्य करने के लिए, आपके पास एक कस्टम नाम स्थान होना चाहिए। यहां बताया गया है कि आप ऐसा कैसे करते हैं:

/* IN ORDER TO VALIDATE you must add namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

और फिर कस्टम नामस्थान के साथ फ़ील्ड नाम आइटम को उपसर्ग करें इस उदाहरण में, मैंने नीचे "mycustomfields" का उपयोग किया है:

/*  add elements    */
add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<mycustomfields:{$field}>{$value}</mycustomfields:{$field}>\n";
  }
}

एक साइड नोट पर आप 3 में से किसी में हुक करने के लिए एक क्रिया का उपयोग कर सकते हैं

    rss2_ns : to add a specific namespace
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : to add tags in the feed header
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : to add tags in each feed items
            add_action('rss2_item', 'my_rss2_item');

यहाँ दिखाने वालों के लिए: Jetpack विज्ञापन xmlns: geo और xmlns: georss namespaces। यदि आप Jetpack का उपयोग कर रहे हैं तो इन्हें जोड़ने की कोई आवश्यकता नहीं है।
मस्ताबा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.