Using WordPress ‘add_feed()’ PHP function

The add_feed() WordPress PHP function is used to add a new feed type like /atom1/.

Usage

Here’s how you could use the add_feed() function:

function add_custom_feed() {
  add_feed( 'custom', 'render_custom_feed' );
}
add_action( 'init', 'add_custom_feed' );

In this example, ‘custom’ is the name of the feed, and ‘render_custom_feed’ is the function that will be called when the feed is accessed.

Parameters

  • $feedname (string) – This is the name of your feed.
  • $callback (callable) – This is the function that will be run when your feed is displayed.

More information

See WordPress Developer Resources: add_feed()

Note: When you add a new custom feed, the endpoint will render using a Content-Type: application/octet-stream; charset=UTF-8 by default. You can use header('Content-Type: application/rss+xml'); in your callback function to change this.

Examples

Basic usage

In this example, we are simply adding a new feed named ‘custom’.

function add_custom_feed() {
  add_feed('custom', 'render_custom_feed');
}
add_action('init', 'add_custom_feed');

function render_custom_feed() {
  echo 'This is a custom feed!';
}

Changing content type

This example demonstrates how to change the content type of your feed.

function add_custom_feed() {
  add_feed('custom', 'render_custom_feed');
}
add_action('init', 'add_custom_feed');

function render_custom_feed() {
  header('Content-Type: application/rss+xml');
  echo 'This is a custom feed with RSS XML content type!';
}

Using add_filter()

In this example, we’re using the add_filter() function to change the content type of our feed.

function add_custom_feed() {
  add_feed('custom', 'render_custom_feed');
}
add_action('init', 'add_custom_feed');

function custom_feed_content_type( $content_type, $type ) {
  if('custom' == $type) {
    $content_type = 'application/rss+xml';
  }
  return $content_type;
}
add_filter('feed_content_type', 'custom_feed_content_type', 10, 2);

function render_custom_feed() {
  echo 'This is a custom feed with RSS XML content type, set with add_filter!';
}

Creating a feed from a custom WP Query

This example creates a feed from a custom WP Query, based on tags.

add_action('init', 'wpdocs_custom_feed_rss2');

function wpdocs_custom_feed_rss2() {
  add_feed('wpdocs_custom', 'wpdocs_change_main_query');

  function wpdocs_change_main_query() {
    header('Content-Type: application/rss+xml');
    global $wp_query;
    if (!empty($_GET['tag'])) {
      $tag = $_GET['tag'];
    }
    $wp_query = new WP_Query(array('post_type' => 'any', 'fields' => 'ids', 'tag' => $tag));
    get_template_part('feed', 'rss2');
  }
}

Loading a template file for feed

This example shows how to load a specific template file for your feed.

function wpdocs_add_mwb_feed() {
  add_feed('mwbfeed', 'wpdocs_makewebbetter_feed');
}