Show Top 10 posts in a rss feed

I am trying to get a rss feed that will show the top 10 posts for the week. I am using the top 10 popular posts plugin to show them in a sidebar on the site which works great but need to show them in a rss so that I can have them send in a email that goes out. Below is some code for the top 10 API. Any help would be great.

?php
/*
* This example fetches the popular posts tracked by Top 10. 
*
 */

if ( function_exists( 'get_tptn_pop_posts' ) ) {
$settings = array(
    'daily' = TRUE,
    'daily_range' = 30,
    'limit' = 20,
    'strict_limit' = FALSE,
  );
  $topposts = get_tptn_pop_posts( $settings ); // Array of posts

  $topposts = wp_list_pluck( (array) $topposts, 'postnumber' );

  $args = array(
    'post__in' = $topposts,
    'orderby' = 'post__in',
    'posts_per_page' = 7,
    'ignore_sticky_posts' = 1 
  );

  $my_query = new WP_Query( $args );
  if ( $my_query-have_posts() ) {
    while ( $my_query-have_posts() ) {
        $my_query-the_post();
        echo 'a href="' . get_permalink( get_the_ID() ) . '"';
        the_title();
        echo '/a';
        wp_reset_postdata();
     }
  } else {
  }
  wp_reset_query();

  }

Topic popular-posts rss Wordpress

Category Web


You could do it by overriding the main query results if there is a querystring detected in the feed URL eg. ?top_ten

Add a query variable for the top ten:

function my_query_vars( $query_vars ) {
    $query_vars[] = 'top_ten';
    return $query_vars;
}
add_filter( 'query_vars', 'my_query_vars' );

Create a function for your code to retrieve the top ten as a query

function my_top_ten_query($limit, $query) {

    if ( !function_exists( 'get_tptn_pop_posts' ) ) {return $query;}

    $settings = array(
        'daily' => TRUE,
        'daily_range' => 30,
        'limit' => 20,
        'strict_limit' => FALSE,
    );
    $topposts = get_tptn_pop_posts( $settings ); // Array of posts

    $topposts = wp_list_pluck( (array) $topposts, 'postnumber' );

    $args = array(
        'post__in' => $topposts,
        'orderby' => 'post__in',
        'posts_per_page' => $limit,
        'ignore_sticky_posts' => 1 
    );

    $my_query = new WP_Query( $args );
    return $my_query;

}

Then filter the main query to check for the querystring and return your top ten query instead of the standard feed query:

function my_feed_posts_filter( $query ) {

    // only for feeds
    if ( $query->is_feed && $query->is_main_query() )  {

        // check if the top_ten variable is set 
        if ( isset( $query->query_vars['top_ten'] ) 
                && ! empty( $query->query_vars['top_ten'] ) ) {
            // return your top ten query object instead
            return my_top_ten_query($query->query_vars['top_ten'], $query);
        }
    } 
    return $query;
}

add_filter( 'the_posts', 'my_feed_posts_filter' )

Solution adapted from this answer on custom feed queries.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.