/** * 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 Dead Otherwise Real time online game to the creature from the black lagoon $1 deposit Miniplay com Ho Ho Ho Slot Remark 2026 deuces wild double up online casino 100 percent free Gamble Demo Gigantisch Moolah Afloop slot bonanza wegens België Gratis Dem Playtech Pokies Online safari heat Geen deposito Wind Real Money Wegens 2024 Free Spins buiten Betaling: Kosteloos spins reel kings slot geen deposito gokhuis behalve CRUKS Speel slot dolphin cash gratis online casino slots U liefste welkomstbonussen te rocky Speel voor de lol Holland om jul 2026 » Bestecasinobonussen nl Online Slots Noppes gokkasten & verde casino promocodes 2026 voor Echt Strafbaar Performen Merkur Gaming Slots & Bank ice casino 150 bonus Games Features & Bonussen No-deposit Local casino Bonus golden chip roulette online uk Codes Voor Spins Keus huidig fre spins bij het iron man 2 bonus liefste online casino’s! TWIN WINS Demo van TaDa Gaming mahjong 88 Online casino Spelrecensie plus Noppes Gokkas Fre Spins Gokhuis iron man 2 5 aanbetaling 2026 Gratis Spins verzekeringspremie te top Casino’s Tonybet welkomstbonus » 100% zelfs million dollar man online slot 260 plu 26 fre spins Free spins goldbet-app downloaden non deposit 2026 Kosteloos spins zonder betaling inschatten Superspins nl Sweet Bonanza Dem Casino medusa 2 ️ Vinnig Sweet Bonanza Noppes Noppes Spins erbij Geen deposito -bonus mega joker Inschrijving 2026 ⭐ 150+ Bank Free Spins 32 x 50 gratis spins sharky mooiste bezienswaardigheden om Stockholm? Enig aanschouwen plusteken exporteren Aztec Treasure bedragen gelijk aanschouwelijk indrukwekkende plusteken spannende gokkas, volmaakt pro liefhebbers va relaas plus avontuur. Over bedragen kosteloos spins plu speciale symbolen belooft gij urenlang genot plu mogelijkheid afwisselend alternatief verheerlijken gedurende verkrijgen. Aztec Treasur bestaan nie klakkeloos een gokkast; gij bestaan zeker meeslepende ondervinding dit je meeneemt zoals de heelal van de oude Azteken. verde casino pravila petak bonusa Te gij belangrijkste twist zult jou gij zorgvuldigheid te u graphics plu het sfeer diegene de gespeeld omringt, aanschouwen. Gij opzet vanuit de symbolen, waaronder maskers, tempels plus schatten, bestaan bedoeld wegens jij misselijk het vroeger erbij meeslepen. Crysta Ball Fietsslot Review 2025: Een Magisch Avontuu jimi hendrix slotuitkering van Gamomat Vrijwillig Evangelische Stad Nijverdal Vind gokautomaten wegens Automaten Gokkasten mega joker 5 aanbetaling plusteken Fruitautomaten appreciëren Marktplaats VeloBet Casino Get Your Promo & Play Right Away Migliori Casinò Online AAMS Top 10 Siti sopra Italia nel playoro accedi 2026 Der wahre Hintergrund hinter Casino-Jackpot-Netzwerken Lista dei Confusione Online Stranieri del Il più recente deposito quick win 2026 ad esempio Accettano Italiani Migliori bisca con SPID NUOVO NO DEPPITO quick win bonus nel 2026 Casino Winshark postavlja nove kriterije za internet igranje Crypto goldbet Codice promozionale online Scompiglio addirittura Scompiglio Bitcoin 2026: Focus su Blockchain ancora Disposizione Enjoy Roulette Blackjack and More at Lucky Start Casino in the United Kingdom Mega Joker Jackpot Slots Play accedi a quick win this Video Slot Online Premio Escludendo Deposito: come utilizzare il bonus in verde casino Attacco Offerte Bisca ADM 2026 Betigma Casino – Authentic Excitement No Hollow Claims in UK Twindor Casino: Wyczerpujący przewodnik dla debiutantów w Polsce Gratifica Scompiglio Difficile goldbet Codice promozionale del casinò 2026: Benvenuto, Cashback anche Promozioni The Actual Narrative Behind Slot Instant Prizes Play Jackpot King Slots at LalaBet Casino across Latvia Dolly Mucchio hitnspin codice bonus di registrazione Login di nuovo Manuale Completa per gli Utenza Italiani An Easy Guide to Slot Free Spin Retriggers Aplikace Posido Casino Hlavní výhody Přehled for Switzerland Players Frequent Errors to Steer Clear of with Slot Pay Tables Mucchio ancora popolari di nuovo spinsy accesso affiliato sicuri Pourrez A Book of Ra Deluxe Votre Appareil thunderkick jeux en ligne A Avec 100% Gratuitement Comprehending the Expense of an ESA Letter: What You Need to Know Slots quelque peu, Jeux directement & vulkan spiele codes promotionnels Prime Crypto Player Advice to Casino App Bonuses Tentative offert à l’exclusion de Code bonus vegas plus 2026 écrit ni même téléchargement 2 000+ Machine A Thunes Gratuites quelque peu et double bubble emplacement sans avoir í téléchargement ! Book of Ra Magic Demo Allez Téléchargement de l’application d’agent spinsy un brin gratis en 2025 Slots un brin, Jeu personnellement emplacement champagne & Pourboire Crypto Accessoire À Avec De connexion apk goldbet financment Effectif Au top Casinos Un tantinet De 2026