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.

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

Solutions Collecting From Web of "Add Custom Fields to Custom Post Type RSS"

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.

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.

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