เพิ่มฟิลด์ที่กำหนดเองลงใน RSS ประเภทโพสต์ที่กำหนดเอง


17

ฉันต้องการเพิ่มฟิลด์ที่กำหนดเองในประเภทโพสต์ที่กำหนดเองของฉันไปยังฟีด RSS สำหรับประเภทโพสต์ที่อยู่ที่http://example.com/feed/?post_type=my_custom_post_type

ฉันเห็นข้อมูลเกี่ยวกับการทำเช่นนี้กับฟีดปกติ แต่ไม่มีอะไรจะเขียนฟีดประเภทโพสต์ที่กำหนดเองได้อีก

ฉันจะต้องเพิ่ม 10 - 15 รายการลงในฟีด (การกระทำที่ 1, การกระทำที่ 2, การกระทำที่ 3, ราคา, ลิงก์การซื้อ ... )

คำตอบ:


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 ในพื้นที่ค่าเมตาด้วยรหัสโพสต์ได้ใช่ไหม
Curtismchale

2
คำตอบที่ดี!
MikeSchinkel

@curtismchale ฉันเพิ่งรวมคำตอบที่ง่ายที่สุด หากคุณดึงในหลาย ๆ ฟิลด์ฉันอาจจะไปกับสิ่งที่จัดรูปแบบมากขึ้นเช่นคำตอบของ @ mikeschinkel
prettyboymp

19

สวัสดี@curtismchale:

การตอบกลับที่ยอดเยี่ยมของ @ 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";
  }
}

ปล. ให้แน่ใจว่าได้แจก @tytyboymp เพราะฉันไม่รู้ว่าจะทำอย่างไรก่อนตอบเขา ฉันแค่ตอบด้วยเพราะฉันไม่แน่ใจว่ามันจะนานแค่ไหนก่อนที่เขาจะกลับมาดังนั้นฉันจึงตัดสินใจที่จะให้คำตอบในเวลาเฉลี่ย


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
MastaBaba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.