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…)
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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.
Method 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.
Method 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');
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0