Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

functions.php

I added a filter in the functions.php file to grab the do_feed_rss2 and the do_feed_atom with my own RSS function with just a simple a simple text replacement "Answers" instead of "Comments". I'm definitely not trying to use stacks as my own debugger, please let me know if that's how this comes across, just completely stooped on this one. Any help would be muchly appreciated.

<?php 
function answersrss2( $for_comments ) {
    if ( $for_comments ) {
        header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);

        echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
        ?>
        <rss version="2.0"
            xmlns:content="http://purl.org/rss/1.0/modules/content/"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:atom="http://www.w3.org/2005/Atom"
            xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
            <?php do_action('rss2_ns'); do_action('rss2_comments_ns'); ?>
            >
        <channel>
            <title><?php
                if ( is_singular() )
                    printf(ent2ncr(__('Answers on: %s')), get_the_title_rss());
                elseif ( is_search() )
                    printf(ent2ncr(__('Answers for %s searching on %s')), get_bloginfo_rss( 'name' ), esc_attr($wp_query->query_vars['s']));
                else
                    printf(ent2ncr(__('Answers for %s')), get_bloginfo_rss( 'name' ) . get_wp_title_rss());
            ?></title>
            <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
            <link><?php (is_single()) ? the_permalink_rss() : bloginfo_rss("url") ?></link>
            <description><?php bloginfo_rss("description") ?></description>
            <lastBuildDate><?php echo mysql2date('r', get_lastcommentmodified('GMT')); ?></lastBuildDate>
            <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
            <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
            <?php do_action('commentsrss2_head'); ?>
        <?php
        if ( have_comments() ) : while ( have_comments() ) : the_comment();
            $comment_post = get_post($comment->comment_post_ID);
            get_post_custom($comment_post->ID);
        ?>
            <item>
                <title><?php
                    if ( !is_singular() ) {
                        $title = get_the_title($comment_post->ID);
                        $title = apply_filters('the_title_rss', $title);
                        printf(ent2ncr(__('Answers on %1$s by %2$s')), $title, get_comment_author_rss());
                    } else {
                        printf(ent2ncr(__('By: %s')), get_comment_author_rss());
                    }
                ?></title>
                <link><?php comment_link() ?></link>
                <dc:creator><?php echo get_comment_author_rss() ?></dc:creator>
                <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_comment_time('Y-m-d H:i:s', true, false), false); ?></pubDate>
                <guid isPermaLink="false"><?php comment_guid() ?></guid>
        <?php if ( post_password_required($comment_post) ) : ?>
                <description><?php echo ent2ncr(__('Protected Comments: Please enter your password to view comments.')); ?></description>
                <content:encoded><![CDATA[<?php echo get_the_password_form() ?>]]></content:encoded>
        <?php else : // post pass ?>
                <description><?php comment_text_rss() ?></description>
                <content:encoded><![CDATA[<?php comment_text() ?>]]></content:encoded>
        <?php endif; // post pass
            do_action('commentrss2_item', $comment->comment_ID, $comment_post->ID);
        ?>
            </item>
        <?php endwhile; endif; ?>
        </channel>
        </rss>
<?php
    } else
        load_template( ABSPATH . WPINC . '/feed-rss2.php' );
}


function answersatom( $for_comments ) {
    if ($for_comments)
        { ?>
            <?php
            header('Content-Type: ' . feed_content_type('atom') . '; charset=' . get_option('blog_charset'), true);
            echo '<?xml version="1.0" encoding="' . get_option('blog_charset') . '" ?' . '>';
            ?>
            <feed
                xmlns="http://www.w3.org/2005/Atom"
                xml:lang="<?php echo get_option('rss_language'); ?>"
                xmlns:thr="http://purl.org/syndication/thread/1.0"
                <?php do_action('atom_ns'); do_action('atom_comments_ns'); ?>
            >
                <title type="text"><?php
                    if ( is_singular() )
                        printf(ent2ncr(__('Comments on %s')), get_the_title_rss());
                    elseif ( is_search() )
                        printf(ent2ncr(__('Comments for %1$s searching on %2$s')), get_bloginfo_rss( 'name' ), get_search_query() );
                    else
                        printf(ent2ncr(__('Comments for %s')), get_bloginfo_rss( 'name' ) . get_wp_title_rss());
                ?></title>
                <subtitle type="text"><?php bloginfo_rss('description'); ?></subtitle>

                <updated><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_lastcommentmodified('GMT'), false); ?></updated>

            <?php if ( is_singular() ) { ?>
                <link rel="alternate" type="<?php bloginfo_rss('html_type'); ?>" href="<?php comments_link_feed(); ?>" />
                <link rel="self" type="application/atom+xml" href="<?php echo get_post_comments_feed_link('', 'atom'); ?>" />
                <id><?php echo get_post_comments_feed_link('', 'atom'); ?></id>
            <?php } elseif(is_search()) { ?>
                <link rel="alternate" type="<?php bloginfo_rss('html_type'); ?>" href="<?php echo home_url() . '?s=' . get_search_query(); ?>" />
                <link rel="self" type="application/atom+xml" href="<?php echo get_search_comments_feed_link('', 'atom'); ?>" />
                <id><?php echo get_search_comments_feed_link('', 'atom'); ?></id>
            <?php } else { ?>
                <link rel="alternate" type="<?php bloginfo_rss('html_type'); ?>" href="<?php bloginfo_rss('url'); ?>" />
                <link rel="self" type="application/atom+xml" href="<?php bloginfo_rss('comments_atom_url'); ?>" />
                <id><?php bloginfo_rss('comments_atom_url'); ?></id>
            <?php } ?>
            <?php do_action('comments_atom_head'); ?>
            <?php
            if ( have_comments() ) : while ( have_comments() ) : the_comment();
                $comment_post = get_post($comment->comment_post_ID);
                get_post_custom($comment_post->ID);
            ?>
                <entry>
                    <title><?php
                        if ( !is_singular() ) {
                            $title = get_the_title($comment_post->ID);
                            $title = apply_filters('the_title_rss', $title);
                            printf(ent2ncr(__('Comment on %1$s by %2$s')), $title, get_comment_author_rss());
                        } else {
                            printf(ent2ncr(__('By: %s')), get_comment_author_rss());
                        }
                    ?></title>
                    <link rel="alternate" href="<?php comment_link(); ?>" type="<?php bloginfo_rss('html_type'); ?>" />

                    <author>
                        <name><?php comment_author_rss(); ?></name>
                        <?php if (get_comment_author_url()) echo '<uri>' . get_comment_author_url() . '</uri>'; ?>

                    </author>

                    <id><?php comment_guid(); ?></id>
                    <updated><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_comment_time('Y-m-d H:i:s', true, false), false); ?></updated>
                    <published><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_comment_time('Y-m-d H:i:s', true, false), false); ?></published>
            <?php if ( post_password_required($comment_post) ) : ?>
                    <content type="html" xml:base="<?php comment_link(); ?>"><![CDATA[<?php echo get_the_password_form(); ?>]]></content>
            <?php else : // post pass ?>
                    <content type="html" xml:base="<?php comment_link(); ?>"><![CDATA[<?php comment_text(); ?>]]></content>
            <?php endif; // post pass
                // Return comment threading information (http://www.ietf.org/rfc/rfc4685.txt)
                if ( $comment->comment_parent == 0 ) : // This comment is top level ?>
                    <thr:in-reply-to ref="<?php the_guid(); ?>" href="<?php the_permalink_rss() ?>" type="<?php bloginfo_rss('html_type'); ?>" />
            <?php else : // This comment is in reply to another comment
                $parent_comment = get_comment($comment->comment_parent);
                // The rel attribute below and the id tag above should be GUIDs, but WP doesn't create them for comments (unlike posts). Either way, its more important that they both use the same system
            ?>
                    <thr:in-reply-to ref="<?php comment_guid($parent_comment) ?>" href="<?php echo get_comment_link($parent_comment) ?>" type="<?php bloginfo_rss('html_type'); ?>" />
            <?php endif;
                do_action('comment_atom_entry', $comment->comment_ID, $comment_post->ID);
            ?>
                </entry>
            <?php endwhile; endif; ?>
            </feed>
        <?php }
    else
        load_template( ABSPATH . WPINC . '/feed-atom.php' );
}

add_filter('do_feed_rss2', 'answersrss2', 1, 1);
add_filter('do_feed_atom', 'answersatom', 1, 1);
?>
share|improve this question
add comment

1 Answer

do_feed_* are not filter hooks, they are action hooks.

Their purpose is not to modify generated markup, but only to call function that loads template. It is highly recommended to only have single function hooked to these.

So correct way to use this:

  1. Remove native function that loads feed template.
  2. Create your tweaked template.
  3. Add your own function that loads your template.

Alternatively use filters in template tags and is_feed() conditional to modify their output when producing feed.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.