/** * 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 Play Mobile Pokies & Software around australia 2026 Not so long ago The best places to View and you may Stream MelBet Gambling establishment jungle jim el dorado slot free spins Opinion 2026 370percent Bonus, three hundred FS Miss, Mrs, Ms: Whats the real difference and in case Should you decide Make use of them? Enjoy ali baba online slot and you will Earn A real income Greatest Sweepstakes Gambling enterprise No-deposit Extra Free Sc 2026 Bond 클래스 C# 프로그래밍 배우기 Discover C# Coding Gamble 100 50 free spins Dracula on registration no deposit percent free Slots Online Merry Xmas Slot Gamble Totally free Demo BetConstruct The newest Casinos on the internet around australia: Top Picks to possess 2025 Can you Win during the casino apple pay Harbors? Just what Is proven to work? How to Options one hundred % free Spins bringing $step 1 Deposit Super Moolah Position Review Gamble Mega Moolah Slot On the web Bally Casino � Registered in the New jersey and you can Pennsylvania The various game is one of the biggest players to the the new Bally Casino’s completion so you can New jersey and you can get PA Blackjack players will get plenty of fun at that casino into the New jersey and you can Pennsylvania Nj-new jersey Internet casino Incentives 2026 $55 No deposit How to Bet Free Spins to have $you to Deposit Conclusion: Bally To the-line casino � Book Protection and you can Game Options 83 The fresh Buffalo Blitz slot No-deposit Incentive Requirements To possess Jun 2026 Upgraded Every day The material in this site go for basic advice just and you can don’t were advice on someone count No-KYC Casinos: six Better Anonymous Crypto Gambling enterprises Entain Couples prove over and over he is yes the new best affiliate programs in the industry Bally To the-line casino � ios (App Store) fifty Totally free Spins No deposit Bonuses Allege Affirmed Also offers 2026 How to Options Free Spins bringing $step 1 Deposit Super Joker Free Slot machine 400 first time deposit casino bonus game Online Gamble Game, Greentube Best RTP Harbors Top ten Large Spending Video game to possess June 2026 Entain Someone prove more than once he is one of an informed member programmes in the industry Find Better Totally free Spins No-deposit Incentives inside the Canada 2026 Mayan casino playfrank no deposit bonus codes Princess Position Review 96 forty-fivepercent RTP Microgaming 2026 Best Crypto Casino No-deposit Incentives 2026: Totally free Spins & Codes Best Web based casinos 2026 casino MARIA $100 free spins Better Websites and Bonuses Reviewed Sugarsweeps Freeplay Password 2026 Sugar Sweeps Promo Code Take a look at Here! Real cash Slots Greatest Harbors to try 50 no deposit spins fat santa out On the web the real deal Money Play Mega Joker Totally free Zero Download free Demonstration Position Current Inventory Money Ideas for Investors Gamble Totally free Position Game No Obtain, Simply Fun! Lucky Zodiac Online game Opinion 2026 lucky88 slots iphone RTP, Bonuses, Demonstration DraftKings Gambling enterprise Promo Code Summer 2026: step one,one hundred thousand Bend Spins Greatest Online Pokies in australia Real money 2026 Magic: The brand new Meeting Certified web site to have MTG reports, sets, and you may events Top 10 The brand new Online slots out of 2025 Ranked because of the Playcasino Lord of the Sea Position Comment Have fun with the Online game live debit card casino for free Gamble on top $1 Minimum Deposit Gambling enterprises Multiple Diamond Slots, Real cash Casino slot games & Free Gamble Demonstration LobsterMania Slot: Tips, Totally free Spins and geisha slot machine much more fifty 100 percent free Spins No-deposit You’ll need for Uk Professionals within the 2026 Durata fa?a a fi, neincetat, in la termen de trei zile lucratoare Se ?tie doar unul la valoarea poate varia oriunde intre Zero