Add Custom Fields to Custom Post Type RSS

I’d like to add custom fields in my custom post type to the RSS feed for that post type located at http://example.com/feed/?post_type=my_custom_post_type

I’ve seen info on doing this for the regular feed but nothing for how to rewrite the custom post type feed.

Read More

I’ll need to add 10 – 15 items to the feed (1st act, 2nd act, 3rd act, price, purchase link…)

Related posts

Leave a Reply

3 comments

  1. 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');
    

    You should be able to substitute and any other meta values you need to add to the feed.

  2. Hi @curtismchale:

    Piggybacking off @prettyboymp’s excellent answer,with my spin on it, here’s how you can do multiple custom fields (I did 3, you can do more):

    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";
      }
    }
    

    P.S. Be sure to give @prettyboymp props because I didn’t know how to do this prior to his answer. I’m just answering too because I’m not sure how long it will be before he returns so I decided to give you an answer in the mean time.

  3. THANK YOU THANK YOU for this excellent piece of information.

    I wanted to extend what the other two have written already…
    For this to validate, you must have a custom namespace.
    Here’s how you do that:

    /* 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";
    }
    

    And then prefix the field name item with the custom namespace
    In this example, I’ve used “mycustomfields”
    See below:

    /*  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";
      }
    }
    

    On a side note you can use an action to hook into any of the 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');