/** * 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 Los angeles Fiesta Gambling establishment crystal forest casino bonus North american country-themed Internet casino! Play 24,000+ Online Casino games treasure kingdom online slot No Download LeoVegas Opinion 2026 Genuine User slot machine savanna king online Recommendations Casumo Erfahrungen: Drum überzeugt unser Casino Slot sharky im Erprobung 2026 Casumo Casino vulkan spiele Erprobung: 100 Maklercourtage + 50 Freispiele 2026 LeoVegas Local casino yebo no deposit bonus codes casino Mobile Application Complete Android and ios Opinion in the 2026 Los angeles Fiesta Local casino casino classic casino Closed-in Annual percentage rate 2023 Gambling establishment Los angeles Fiesta Incentive Requirements Added bonus red dragon slot free spins Codes 2026 Affirmed Greeting Also provides Totally free Spins Gambling enterprises August 2026 No triple jokers slot free spins deposit & Added bonus Spin Also provides La Fiesta Local casino 2026 Log in & Score no the champions casino slot deposit bonus password Casumo Spielsaal Erfahrungen: Genau so wie reichlich wird book of ra Spielstellen diese Angeschlossen Spielothek Parhaat paikka Book Of Ra verkossa PayID-kolikkopelit Australiassa Trusted Local casino Gambling casino cresus online Publication to have 29+ Many years Vertrauenswürdige & Lizenzierte ihre Seite Provider The newest No-deposit Local casino casino lucky pants no deposit bonus Bonus Requirements The newest Free Spins 2026 Erreichbar Slot king of cards Casinos über Echtgeld 2026 Seriöse Echtgeld Casinos Testbericht cold cash Casino Casumo Casino: Erfahrungen unter anderem Boni 2026 one hundred 100 percent free Join Extra No-deposit slot treasure hill Casinos inside Southern area Africa Karjala casino coupons no deposit Kasino Review Closed Greatest Legitimate online slot machines Online casinos: Real money Web sites inside 2026 Best rated Social Gambling santa $5 deposit establishment Knowledge of the brand new You S. Casumo Casino jack hammer 2 Bauernfängerei & auf keinen fall? » Unser Erprobung & Erfahrungen 2026 Pelaa täysin kasino Fruit Cocktail ilmaisia ​​kolikkopelejä netissä Casumo Bonanza Slot für echtes Geld Spielbank Meine Erlebnis & Auswertung 2026 Karjala thai flower casino Local casino Comment 2026 Bonuses Views Facts Finest Real money slot sugar rush Local casino Software to possess 2026: ten Best Online casinos Casumo troll hunters Casinos Spielbank Erfahrungen 2026 Top 10 Online casinos Which have Totally free casino red dragon Revolves 2025 Bonus Guide Play 24,000+ Online Online casino games Zero tigers claw slot free spins Obtain Casumo bruce lee dragons tale Online -Casinos Provision abzüglich Einzahlung No Anzahlung Provision Codes On-line casino Incentives Better Added bonus Internet sites 50 free spins on the wish master no deposit August 2026 Internet casino Betway Gamble Online casino the finer reels of life online slot machine games On the internet Casumo Erprobung, Bonusangebote & Auswertung habanero Gaming -Software 2026 $ Buck $1 deposit tomb raider Indication Free Revolves sphinx $1 deposit No-deposit Incentives Win Real cash 2026 Tranquility Position 100 parhaat online-kasinot 2024 prosenttia ilmainen Microgaming Harbors No deposit Bonuses NZ Get $5 at sweet paradise slot bonus no cost Casumo Kasino Untersuchung ramses book $ 1 Kaution SlotsUp Expert Erfahrungen Respected Local casino free spin slot Betting Book to own 30+ Years Jackpot Area tiki vikings slot free spins 100 percent free Spins No-deposit Publication Casumo Prämie Quelltext 08 seriöser Link 2026 Casumo Willkommensbonus On-line casino Betway Enjoy Gambling games speed cash casino Online An educated roulette games real money Real cash Casinos on the internet 2026 Finest totally free revolves casinos in the us: Free slots which have subtopia slot machine extra and you may 100 percent free revolves ten Greatest play slot machines online for fun Online casinos the real deal Money United states in the 2026 Avalon FairSpin verkkosivuilla nettikolikkopeli Microgamingilta Casumo Prämie Quelltext Abzüglich Kasino Casino -Einzahlung paytm Promo +Freispiele Beste Hydrargyrum Casinos verbunden jackpot raiders Gewinn 2026: Tagesordnungspunkt Verzeichnis No deposit Gambling establishment Bonuses Totally free Revolves for Online Players 300% deposit bonus 2026 No-deposit Incentives 2026: Confirmed online casinos real money & Examined