bbp_request_feed_trap( array $query_vars = array() )
This function is hooked into the WordPress ‘request’ action and is responsible for sniffing out the query vars and serving up RSS2 feeds if the stars align and the user has requested a feed of any Forums type.
Description
Parameters
- $query_vars
-
(Optional)
Default value: array()
Return
(array)
Source
File: bp-forums/common/functions.php
function bbp_request_feed_trap( $query_vars = array() ) { // Looking at a feed if ( isset( $query_vars['feed'] ) ) { // Forum/Topic/Reply Feed if ( isset( $query_vars['post_type'] ) ) { // Matched post type $post_type = false; // Post types to check $post_types = array( bbp_get_forum_post_type(), bbp_get_topic_post_type(), bbp_get_reply_post_type() ); // Cast query vars as array outside of foreach loop $qv_array = (array) $query_vars['post_type']; // Check if this query is for a Forums post type foreach ( $post_types as $bbp_pt ) { if ( in_array( $bbp_pt, $qv_array, true ) ) { $post_type = $bbp_pt; break; } } // Looking at a Forums post type if ( ! empty( $post_type ) ) { // Supported select query vars $select_query_vars = array( 'p' => false, 'name' => false, $post_type => false, ); // Setup matched variables to select foreach ( $query_vars as $key => $value ) { if ( isset( $select_query_vars[$key] ) ) { $select_query_vars[$key] = $value; } } // Remove any empties $select_query_vars = array_filter( $select_query_vars ); // What Forums post type are we looking for feeds on? switch ( $post_type ) { // Forum case bbp_get_forum_post_type() : // Define local variable(s) $meta_query = array(); // Single forum if ( !empty( $select_query_vars ) ) { // Load up our own query query_posts( array_merge( array( 'post_type' => bbp_get_forum_post_type(), 'feed' => true ), $select_query_vars ) ); // Restrict to specific forum ID $meta_query = array( array( 'key' => '_bbp_forum_id', 'value' => bbp_get_forum_id(), 'type' => 'numeric', 'compare' => '=' ) ); } // Only forum replies if ( !empty( $_GET['type'] ) && ( bbp_get_reply_post_type() === $_GET['type'] ) ) { // The query $the_query = array( 'author' => 0, 'feed' => true, 'post_type' => bbp_get_reply_post_type(), 'post_parent' => 'any', 'post_status' => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ), 'posts_per_page' => bbp_get_replies_per_rss_page(), 'order' => 'DESC', 'meta_query' => $meta_query ); // Output the feed bbp_display_replies_feed_rss2( $the_query ); // Only forum topics } elseif ( !empty( $_GET['type'] ) && ( bbp_get_topic_post_type() === $_GET['type'] ) ) { // The query $the_query = array( 'author' => 0, 'feed' => true, 'post_type' => bbp_get_topic_post_type(), 'post_parent' => bbp_get_forum_id(), 'post_status' => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ), 'posts_per_page' => bbp_get_topics_per_rss_page(), 'order' => 'DESC' ); // Output the feed bbp_display_topics_feed_rss2( $the_query ); // All forum topics and replies } else { // Exclude private/hidden forums if not looking at single if ( empty( $select_query_vars ) ) $meta_query = array( bbp_exclude_forum_ids( 'meta_query' ) ); // The query $the_query = array( 'author' => 0, 'feed' => true, 'post_type' => array( bbp_get_reply_post_type(), bbp_get_topic_post_type() ), 'post_parent' => 'any', 'post_status' => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ), 'posts_per_page' => bbp_get_replies_per_rss_page(), 'order' => 'DESC', 'meta_query' => $meta_query ); // Output the feed bbp_display_replies_feed_rss2( $the_query ); } break; // Topic feed - Show replies case bbp_get_topic_post_type() : // Single topic if ( !empty( $select_query_vars ) ) { // Load up our own query query_posts( array_merge( array( 'post_type' => bbp_get_topic_post_type(), 'feed' => true ), $select_query_vars ) ); // Output the feed bbp_display_replies_feed_rss2( array( 'feed' => true ) ); // All topics } else { // The query $the_query = array( 'author' => 0, 'feed' => true, 'post_parent' => 'any', 'posts_per_page' => bbp_get_topics_per_rss_page(), 'show_stickies' => false ); // Output the feed bbp_display_topics_feed_rss2( $the_query ); } break; // Replies case bbp_get_reply_post_type() : // The query $the_query = array( 'posts_per_page' => bbp_get_replies_per_rss_page(), 'meta_query' => array( array( ) ), 'feed' => true ); // All replies if ( empty( $select_query_vars ) ) { bbp_display_replies_feed_rss2( $the_query ); } break; } } // Single Topic Vview } elseif ( isset( $query_vars[ bbp_get_view_rewrite_id() ] ) ) { // Get the view $view = $query_vars[ bbp_get_view_rewrite_id() ]; // We have a view to display a feed if ( !empty( $view ) ) { // Get the view query $the_query = bbp_get_view_query_args( $view ); // Output the feed bbp_display_topics_feed_rss2( $the_query ); } } // @todo User profile feeds } // No feed so continue on return $query_vars; }
Changelog
Version | Description |
---|---|
bbPress (r3171) | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.