Changeset 14026 for trunk/src/bp-blogs/bp-blogs-filters.php
- Timestamp:
- 09/27/2024 09:11:27 PM (15 months ago)
- File:
-
- 1 edited
-
trunk/src/bp-blogs/bp-blogs-filters.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-blogs/bp-blogs-filters.php
r13476 r14026 190 190 return $retval; 191 191 } 192 193 /** 194 * Filter the Blog url in the WP_REST_Request::from_url(). 195 * 196 * First part in embedding the latest blog post. 197 * 198 * @link https://github.com/buddypress/BP-REST/pull/395 199 * 200 * @param WP_REST_Request $request Request used to generate the response. 201 * @param string $url URL being requested. 202 * @return WP_REST_Request 203 */ 204 function bp_filter_rest_request_blog_url( $request, $url ) { 205 206 if ( ! bp_is_active( 'blogs' ) || empty( $url ) ) { 207 return $request; 208 } 209 210 // Get url info. 211 $bits = wp_parse_url( $url ); 212 $home_bits = wp_parse_url( get_home_url() ); 213 214 if ( empty( $bits['host'] ) || empty( $home_bits['host'] ) ) { 215 return $request; 216 } 217 218 // Bail early if the request URL is the same as the current site. 219 if ( $bits['host'] === $home_bits['host'] ) { 220 return $request; 221 } 222 223 // Create a fake request to bypass the current logic. 224 $request = new WP_REST_Request( 'GET', $bits['path'] ); 225 $request->set_query_params( array( 'bp_blogs_url' => $url ) ); 226 227 return $request; 228 } 229 add_filter( 'rest_request_from_url', 'bp_filter_rest_request_blog_url', 10, 2 ); 230 231 /** 232 * Output BuddyPress blog response. 233 * 234 * Second part in embedding the latest blog post. 235 * 236 * @link https://github.com/buddypress/BP-REST/pull/395 237 * 238 * @param WP_REST_Response $response Response generated by the request. 239 * @param WP_REST_Server $instance Server instance. 240 * @param WP_REST_Request $request Request used to generate the response. 241 * @return WP_REST_Response 242 */ 243 function bp_rest_post_dispatch( $response, $instance, $request ) { 244 if ( 245 ! bp_is_active( 'blogs' ) 246 || 404 !== $response->get_status() 247 || 'embed' !== $request->get_param( 'context' ) 248 || empty( $request->get_param( 'bp_blogs_url' ) ) 249 || empty( $request->get_route() ) 250 ) { 251 return $response; 252 } 253 254 // Get domain from url. 255 $bits = wp_parse_url( $request->get_param( 'bp_blogs_url' ) ); 256 257 // We need those two to proceed. 258 if ( empty( $bits['host'] ) || empty( $bits['path'] ) ) { 259 return $response; 260 } 261 262 // Request route and requested URL path should match. 263 if ( $request->get_route() !== $bits['path'] ) { 264 return $response; 265 } 266 267 // Get site using the domain. 268 $site = get_site_by_path( $bits['host'], $bits['path'] ); 269 270 if ( ! $site instanceof WP_Site || empty( $site->blog_id ) ) { 271 return $response; 272 } 273 274 switch_to_blog( absint( $site->blog_id ) ); 275 276 $response = rest_do_request( 277 new WP_REST_Request( 278 'GET', 279 str_replace( 280 '/wp-json', 281 '', 282 $request->get_route() 283 ) 284 ) 285 ); 286 287 restore_current_blog(); 288 289 // Return it, regardless if it was successful. 290 return $response; 291 } 292 add_filter( 'rest_post_dispatch', 'bp_rest_post_dispatch', 10, 3 );
Note: See TracChangeset
for help on using the changeset viewer.