BP_REST_Forums_Endpoint::get_items( WP_REST_Request $request )
Retrieve Forums.
Description
Parameters
- $request
-
(Required) Full details about the request.
Return
(WP_REST_Response) | WP_Error
Source
File: bp-forums/classes/class-bp-rest-forums-endpoint.php
public function get_items( $request ) { $args = array( 'post_parent' => ( ! empty( $request['parent'] ) ? $request['parent'] : 0 ), 'post_status' => ( ! empty( $request['status'] ) ? $request['status'] : bbp_get_public_status_id() ), 'orderby' => ( ! empty( $request['orderby'] ) ? $request['orderby'] : 'menu_order title' ), 'order' => ( ! empty( $request['order'] ) ? $request['order'] : 'asc' ), 'paged' => ( ! empty( $request['page'] ) ? $request['page'] : '' ), 'posts_per_page' => ( ! empty( $request['per_page'] ) ? $request['per_page'] : bbp_get_forums_per_page() ), ); if ( ! empty( $request['search'] ) ) { $args['s'] = $request['search']; } if ( ! empty( $request['author'] ) ) { $args['author'] = $request['author']; } if ( ! empty( $request['author_exclude'] ) ) { $args['author__not_in'] = $request['author_exclude']; } if ( ! empty( $request['exclude'] ) ) { $args['post__not_in'] = $request['exclude']; } if ( ! empty( $request['include'] ) ) { $args['post__in'] = $request['include']; } if ( ! empty( $request['offset'] ) ) { $args['offset'] = $request['offset']; } if ( ! empty( $args['orderby'] ) && is_array( $args['orderby'] ) ) { if ( in_array( 'popular', $args['orderby'], true ) ) { $args['orderby'] = 'meta_value_num'; $args['meta_key'] = '_bbp_total_topic_count'; // phpcs:ignore } elseif ( in_array( 'activity', $args['orderby'], true ) ) { $args['orderby'] = 'meta_value'; $args['meta_key'] = '_bbp_last_active_time'; // phpcs:ignore } } if ( is_array( $args['orderby'] ) ) { $args['orderby'] = implode( ' ', $args['orderby'] ); } /** * Filter the query arguments for the request. * * @param array $args Key value array of query var to query value. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ $args = apply_filters( 'bp_rest_forums_get_items_query_args', $args, $request ); $bbp_f = bbp_parse_args( $args, array( 'post_type' => bbp_get_forum_post_type(), 'ignore_sticky_posts' => true, ), 'has_forums' ); if ( isset( $request['subscriptions'] ) && ! empty( $request['subscriptions'] ) ) { $user_id = (int) ( isset( $args['author'] ) && ! empty( $args['author'] ) ) ? $args['author'] : bbp_get_current_user_id(); $subscriptions = bbp_get_user_subscribed_forum_ids( $user_id ); if ( ! empty( $subscriptions ) ) { $bbp_f['post__in'] = $subscriptions; if ( isset( $args['author'] ) ) { unset( $bbp_f['author'] ); } } else { $bbp_f = array(); } } // Run the query. $forums_query = new WP_Query( $bbp_f ); $forums = ( ! empty( $forums_query->posts ) ? $forums_query->posts : array() ); $retval = array(); foreach ( $forums as $forum ) { $retval[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $forum, $request ) ); } $response = rest_ensure_response( $retval ); $response = bp_rest_response_add_total_headers( $response, $forums_query->found_posts, $args['posts_per_page'] ); /** * Fires after a list of forums is fetched via the REST API. * * @param array $forums Fetched forums. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. * * @since 0.1.0 */ do_action( 'bp_rest_forums_get_items', $forums, $response, $request ); return $response; }
Changelog
Version | Description |
---|---|
0.1.0 | 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.