WP_REST_Server::READABLE, 'callback' => array( $this, 'get_post_types' ), 'permission_callback' => function () { return current_user_can( 'edit_posts' ); }, ), ) ); // Number of posts and selected post types are not needed in the Editor. // This is to minimise requests when it can already be handled by the block. register_rest_route( 'wpcom/v2', '/top-posts', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_top_posts' ), 'permission_callback' => function () { return current_user_can( 'edit_posts' ); }, 'args' => array( 'period' => array( 'description' => __( 'Timeframe for stats.', 'jetpack' ), 'type' => array( 'string', 'integer' ), 'required' => true, 'validate_callback' => function ( $param ) { return is_numeric( $param ) || is_string( $param ); }, ), ), ), ) ); } /** * Get the site's post types. * * @return array Site's post types. */ public function get_post_types() { $post_types = array_values( get_post_types( array( 'public' => true ) ) ); $post_types_array = array(); foreach ( $post_types as $type ) { $post_types_array[] = array( 'label' => get_post_type_object( $type )->labels->name, 'id' => $type, ); } return $post_types_array; } /** * Get the site's top content. * * @param \WP_REST_Request $request request object. * * @return array Data on top posts. */ public function get_top_posts( $request ) { if ( ! class_exists( 'Jetpack_Top_Posts_Helper' ) ) { require_once JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-top-posts-helper.php'; } $period = $request->get_param( 'period' ); return Jetpack_Top_Posts_Helper::get_top_posts( $period ); } } wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Top_Posts' );