Add Taxonomy Values Within a Custom Post Type RSS Feed

The question:

I would like to display taxonomies within an RSS feed. I am able to display my custom fields as per Add Custom Fields to Custom Post Type RSS (Thank you to all the contributors of that post), but I am unable to display fields that contain taxonomy values. Here is the code I am using:

add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
if (get_post_type()=='listings') {

$fields = array( 
    'listing_category',
    'listing_type',
    'listing_bedrooms',
    'listing_city',
     );

$post_id = get_the_ID();
foreach($fields as $field)
  if ($value = get_post_meta($post_id,$field,true))
    echo "<{$field}>{$value}</{$field}>n";
  }
}

Here are the 2 taxonomy fields that are not showing:

  • “listing_category” – either “For Sale”, “For Lease”, or Both
    (multiple values).
  • “listing_type” – 1 value containing “Condo”,
    “House”, “Land”, or “Building”.

Any help is greatly appreciated.

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

get_post_meta is only for custom fields. If listing_category and listing_type are in fact taxonomies, you need to use get_the_terms instead. The resulting code would be something like this:

add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
    if (get_post_type()=='listings') {

        $fields = array( 
            'listing_bedrooms',
            'listing_city',
        );

        $post_id = get_the_ID();
        foreach($fields as $field) {
            if ($value = get_post_meta($post_id,$field,true)) {
                echo "<{$field}>{$value}</{$field}>n";
            }
        }

        $taxonomies = array(
           'listing_category',
           'listing_type'
        );

        // Loop through taxonomies
        foreach($taxonomies as $taxonomy) {
            $terms = get_the_terms($post_id,$taxonomy);
            if (is_array($terms)) {
                // Loop through terms
                foreach ($terms as $term) {
                    echo "<{$taxonomy}>{$term->name}</{$taxonomy}>n";
                }
            }
        }
    }
}

See the documentation for get_the_terms here: http://codex.wordpress.org/Function_Reference/get_the_terms


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

Leave a Comment