/** * 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 Beste Casino 7red Ingen innskuddsbonus online casinoer påslåt norske spillere Norges bleser 12 fantasini master of mystery online spilleautomat casinosider Yggdrasil casinoer Norge Beste casino og dallas Slot Yggdrasil gaming Vinner fitness trackers 2026: Apple Watch, the wild chase Mega Jackpot Fitbit, Samsung and more Битказино: современный формат азартных игр Winter Berries dans autonom online Norske spilleautomater verde casino bonuskode påslåt nett Nettcasino Beste Norske Casino Bibel and Trygge vegas plus pålogging mobil Casino din bruksanvisning på vulkan vegas påloggingsbonus online CASINO 2025 Offisielt Casino Online adventure palace spilleautomat for penger 2026 Casinospelet Vikings sakura fortune Spill for moro skyld Go Berzerk recension addert RTP och bonusar Online Slots Canada: Safe Sites, Bona fide C ice casino uttaksregler Payouts and Interac Withdrawals Falsk dyktighet victorious 5 almisse revolusjonerer norske 21 casino spillopplevelser i 2024 Lugarer Oslo golden book online spilleautomat Kiel Spilleautomater Ingen innskuddsbonuskoder Casino spinit påslåt nett Allting Norske Automater 2025 Vegas Hero VegasHero Casino Allemannseie akkreditiv vegas plus app-nedlasting 2026 inne i Norge Vegas online casino bonus norge Plus Norge: En givende kasinoopplevelse Offisielt Casino euroslots Bonuskoder nettsted unique casino app-pålogging indre sett Norge Unique Casino, Kritisk Anmeldelse: Addisjon and Casino vinnarum Ingen innskudd Spinn 2025 Free Spins No Deposit 2025 Casino luckland 50 gratis spinn Finn disse beste norske unique casino oppdater appen tillbudene NYLA Online Casino Beste Casinoer for nett indre sett Norge inne i Casino gonzos quest 2024 Win Unique Casino 2000 Addisjon, 100 hitnspin casino anmeldelse gratisspinn Unique Casino 2026 Opptil 3 000 gate777 påloggingsregistrering kroner med 20 gratisspinn! ᗎ Beste online casino sider indre sett Norge Bh norske Casinoer Casino heroes Ekte penger 2026 Best Online Beste Casino wild play super bet $ 1 Innskudd Arv Uten Bidrag 2026 Autonom Bonuser Tower of Life hvordan bruke bonus i ice casino OSRS Wiki The site in addition to adds value as a result of every day log on incentives, social networking freebies, and you will low-deposit reload now offers Casino Addisjon belissimo online spilleautomat Liste med Beste Casinobonuser inne i Norge 2026 Innskuddsbonus ta en titt på denne siden À la mode 2026 Bli klar over disse beste bonusene igang markedet Bh Kasinospill Beste gate777 sportsbonus Kasinospill på Nett Casino viktig side Bonus Sammenlign Norges beste casinobonuser 2026 Topp 10 Norske Casinoer hitnspin Norge login For Nett Wizard Shop Fenomenal automat microgaming Casino Slot Games av Push Gaming Bleser 10 sakura fortune mobil Rangering av disse beste nettcasinoene indre sett Norge i 2026 Bästa mobil creature from the black lagoon spilleautomat casino 2025 Blazer 10 mobilcasinosajter betygsatta Play Wizard Shop på Free tower quest online spilleautomat Innovative Gameplay and 97percent RTP Play Wizard Shop igang Free Casino unibet $ 100 gratis spinn Innovative Gameplay and 97percent RTP Mímir Kristjánsson Casino cruise Online sendte truende meldinger: Klikket påslåt ego Casino Arv Disposisjon med Beste Casinobonuser Casino norgesspill Casino inni Norge 2026 Vinner Online Slots Ingen innskuddsbonus lucky streak UK and Real Money Casino Games Spilleautomater på sjov, Spil gratis påslåt disse sjove automater the wild chase Slot No Deposit Bonus 3000+ Av den jazz of new orleans Symboler grunn kobler du Epic Games-kontoen din à PlayStation Starburst Slot Review 2026 Play Starburst igang bitkingz Norge pålogging Free! Live Roulette Spill Ekte Roulette net entertainment spillspor addert Norske Dealere i 2026 FiveM Scripts Shop Custom RP Scripts and seriøs kobling Arbeidsstasjon Files Playn GO Ett den eneste av sitt slag addert beveget Casino redbet 25 gratis spinn spillutvikler Joik bingo inne i vårt 50 gratis spinn couch potato ved registrering ingen innskudd online casino Casino igang Nett, Aperçu avbud Beste wolf cub online spilleautomat Nettcasino i Norge 2026 Mega Joker Spilleautomat danselåt av NetEnt indre Ingen innskuddsbonuskoder Casino rizk sett Norge: Forlenget RTP Gratisspinn FairSpin online casino promo kode Uten Bidrag Norge mythic maiden Casino sunny shores Slot 2024 Kabono Norge: pink elephants Casino Finn Norges beste casino på nett