/** * WP_oEmbed_Controller class, used to provide an oEmbed endpoint. * * @package WordPress * @subpackage Embeds * @since 4.4.0 */ /** * oEmbed API endpoint controller. * * Registers the REST API route and delivers the response data. * The output format (XML or JSON) is handled by the REST API. * * @since 4.4.0 */ #[AllowDynamicProperties] final class WP_oEmbed_Controller { /** * Register the oEmbed REST API route. * * @since 4.4.0 */ public function register_routes() { /** * Filters the maxwidth oEmbed parameter. * * @since 4.4.0 * * @param int $maxwidth Maximum allowed width. Default 600. */ $maxwidth = apply_filters( 'oembed_default_width', 600 ); register_rest_route( 'oembed/1.0', '/embed', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', 'args' => array( 'url' => array( 'description' => __( 'The URL of the resource for which to fetch oEmbed data.' ), 'required' => true, 'type' => 'string', 'format' => 'uri', ), 'format' => array( 'default' => 'json', 'sanitize_callback' => 'wp_oembed_ensure_format', ), 'maxwidth' => array( 'default' => $maxwidth, 'sanitize_callback' => 'absint', ), ), ), ) ); register_rest_route( 'oembed/1.0', '/proxy', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_proxy_item' ), 'permission_callback' => array( $this, 'get_proxy_item_permissions_check' ), 'args' => array( 'url' => array( 'description' => __( 'The URL of the resource for which to fetch oEmbed data.' ), 'required' => true, 'type' => 'string', 'format' => 'uri', ), 'format' => array( 'description' => __( 'The oEmbed format to use.' ), 'type' => 'string', 'default' => 'json', 'enum' => array( 'json', 'xml', ), ), 'maxwidth' => array( 'description' => __( 'The maximum width of the embed frame in pixels.' ), 'type' => 'integer', 'default' => $maxwidth, 'sanitize_callback' => 'absint', ), 'maxheight' => array( 'description' => __( 'The maximum height of the embed frame in pixels.' ), 'type' => 'integer', 'sanitize_callback' => 'absint', ), 'discover' => array( 'description' => __( 'Whether to perform an oEmbed discovery request for unsanctioned providers.' ), 'type' => 'boolean', 'default' => true, ), ), ), ) ); } /** * Callback for the embed API endpoint. * * Returns the JSON object for the post. * * @since 4.4.0 * * @param WP_REST_Request $request Full data about the request. * @return array|WP_Error oEmbed response data or WP_Error on failure. */ public function get_item( $request ) { $post_id = url_to_postid( $request['url'] ); /** * Filters the determined post ID. * * @since 4.4.0 * * @param int $post_id The post ID. * @param string $url The requested URL. */ $post_id = apply_filters( 'oembed_request_post_id', $post_id, $request['url'] ); $data = get_oembed_response_data( $post_id, $request['maxwidth'] ); if ( ! $data ) { return new WP_Error( 'oembed_invalid_url', get_status_header_desc( 404 ), array( 'status' => 404 ) ); } return $data; } /** * Checks if current user can make a proxy oEmbed request. * * @since 4.8.0 * * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_proxy_item_permissions_check() { if ( ! current_user_can( 'edit_posts' ) ) { return new WP_Error( 'rest_forbidden', __( 'Sorry, you are not allowed to make proxied oEmbed requests.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Callback for the proxy API endpoint. * * Returns the JSON object for the proxied item. * * @since 4.8.0 * * @see WP_oEmbed::get_html() * @global WP_Embed $wp_embed WordPress Embed object. * @global WP_Scripts $wp_scripts * * @param WP_REST_Request $request Full data about the request. * @return object|WP_Error oEmbed response data or WP_Error on failure. */ public function get_proxy_item( $request ) { global $wp_embed, $wp_scripts; $args = $request->get_params(); // Serve oEmbed data from cache if set. unset( $args['_wpnonce'] ); $cache_key = 'oembed_' . md5( serialize( $args ) ); $data = get_transient( $cache_key ); if ( ! empty( $data ) ) { return $data; } $url = $request['url']; unset( $args['url'] ); // Copy maxwidth/maxheight to width/height since WP_oEmbed::fetch() uses these arg names. if ( isset( $args['maxwidth'] ) ) { $args['width'] = $args['maxwidth']; } if ( isset( $args['maxheight'] ) ) { $args['height'] = $args['maxheight']; } // Short-circuit process for URLs belonging to the current site. $data = get_oembed_response_data_for_url( $url, $args ); if ( $data ) { return $data; } $data = _wp_oembed_get_object()->get_data( $url, $args ); if ( false === $data ) { // Try using a classic embed, instead. /* @var WP_Embed $wp_embed */ $html = $wp_embed->get_embed_handler_html( $args, $url ); if ( $html ) { // Check if any scripts were enqueued by the shortcode, and include them in the response. $enqueued_scripts = array(); foreach ( $wp_scripts->queue as $script ) { $enqueued_scripts[] = $wp_scripts->registered[ $script ]->src; } return (object) array( 'provider_name' => __( 'Embed Handler' ), 'html' => $html, 'scripts' => $enqueued_scripts, ); } return new WP_Error( 'oembed_invalid_url', get_status_header_desc( 404 ), array( 'status' => 404 ) ); } /** This filter is documented in wp-includes/class-wp-oembed.php */ $data->html = apply_filters( 'oembed_result', _wp_oembed_get_object()->data2html( (object) $data, $url ), $url, $args ); /** * Filters the oEmbed TTL value (time to live). * * Similar to the {@see 'oembed_ttl'} filter, but for the REST API * oEmbed proxy endpoint. * * @since 4.8.0 * * @param int $time Time to live (in seconds). * @param string $url The attempted embed URL. * @param array $args An array of embed request arguments. */ $ttl = apply_filters( 'rest_oembed_ttl', DAY_IN_SECONDS, $url, $args ); set_transient( $cache_key, $data, $ttl ); return $data; } } https://validator.w3.org/feed/docs/rss2.html Best On the web Pokies in australia: Finest Real money sites Pokies ReviewsWhat Pokie Machine Wins more? An informed Slots Playing In the seasons Free online games Gamble Today! Play Wonderful Buffalo six-Reel Ports Real money Best On line Pokies Sites around australia July 2026, Modify The brand new Grand Trip Slot slots 40 free spins no deposit Demo & 100 percent free Play Opinion Trendy Fresh fruit Position Enjoy Totally free Slots Demonstrations Harbors, Dining tables, Casino poker, & Much more Petrol Station Playing Guide out of Ra Deluxe Slot While you are Fueling within the Uk Enjoy Position Cool Fruit Farm from the Playtech Secure Casinos on the internet Canada: ten low deposit mobile casino Trusted Sites Free internet games in the Poki Enjoy Today! Guide away from Ra Deluxe 6 Trial by the jungle books step 1 deposit 2026 the fresh Greentube 100 percent free Position and Opinion Kompletný zoznam kasín Vaša brána k online zábave Thunderstruck Slots: Discover Totally free Revolves and you will Incredible Perks The new contrary to popular belief mysterious reason i utilize the $ icon to the You S. money Gamble Free Colorado Tea IGT On casino foxy $100 free spins line Slot machine game Superstar Trek Up against The Opportunity Slot Free to Enjoy Game by IGT Hot-shot Slot machine Software on google Gamble Enjoy 777 Ports for free Finest Slot Video game Instead of Obtain Tren A 100: Guida allo Schema Posologico Free online games at the Poki Play Today! Santastic Position: Free Play within the Demo Form 200percent Deposit Incentives two hundredpercent Extra Gambling enterprise Audit 2026 25 888 welcome bonus code Have to-Find Web sites in the Colorado +Map Free online games at the Poki Play Today! Free Harbors 39,000+ Online Position Games Zero Obtain step 3 Deposit Casinos United kingdom 2026 Enjoy Online of Only step three Lowest Deposit OnlineCasinoPulse Have fun with the Better On line Position Video game Meet up gonzos quest online slot with the Full Reported Cast of Survivor 51 Finest Real cash Casinos on the internet inside the 2026, Established Mystery Art gallery Position Opinion 2026 Free Gamble Demonstration Live Black-jack Gambling enterprises Gamble Black-jack Real time from the Finest All of us Websites 2026 Survivor Group Game Information Adults to boost Fun and you can Connection in 50 free spins on sakura dragon no deposit the Their Events ten Best Casinos on the internet Real cash United states Jul 2026 Spartacus Position Free Enjoy On-line casino Harbors No Download Happy Larry’s Lobstermania Video slot Play IGT Ports at no cost On the web High society Demonstration Position Online game International Totally free Trial Indian Dreaming Online Pokies 2026, Play Indian Thinking 100 percent free Current Publication away from Deceased 100 percent free Spins No-deposit Bonuses to own 2026 Idea of Method: Meaning, casino deposit 5 play with 25 Procedure, and you can Key Architecture SLM Thinking Learning Thing to have MBA Huge Crappy Wolf Slot Review 2026 Free Enjoy Trial Games of Thrones Slots Casino Starburst wildwest online slot Pokie Opinion and you will NZ gambling establishment added bonus Enjoy Mobile Pokies and Applications in australia 2026 Phoenix Sunlight Slot Enjoy Better Slot Game in the Shakebet Now Local News, Environment, and you will Alive Streams KSAZ-Tv Fairy Door Demo by Quickspin Play 100 percent free Ports Thunderstruck Slot Have fun with the Thunderstruck Trial 2026