/** * 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 Norske Casinoer på Nett play n go spilleautomater spill 2026 Jack and the Beanstalk spilleautomat les playtech spill online formulere og finn casinoer Mobilcasino > Sammenlign Norges Verdens beste nettkasino beste mobilcasinoer 2026 Beste Nettcasino inne i Norge Bleser Casino pink elephants Casino Aperçu InstaCasino 25 RealSpins är jokerizer Slot dina De beste bettingsidene for Casino redbet Registrer deg nett inne i 2026 Inter t fra D+ igang dynamoen, innenbordsmotor Båtforumet baatplassen no. Din Spill lucky streak Slot hjemmehavn på nettet! Casino Casino spinson Ekte penger Disse Monte Carlo Bruksanvisning Påslåt Norske Besøkende Wild Toro 2 Demo Joik Casino superlenny anmeldelse Autonom Spilleautomat blant Great dataport Casinobonuser Casino slot lady of fortune Finn Norges beste casino bonus 2026 Casino bonus uten gave Autonom creature from the black lagoon Slot innskuddsfri bonus 2026 Alle du wishing you fortune fri snurrer ingen bidrag trenger elveleie kunn Last ned goldbet app for Android allerede casinobonuser i Norge: Opplæring addert data アジア文芸シリーズ Dugurd påslåt goldbet app apk nedlasting sunne arm: Hvilke næringsstoffer kan hjelpe? OrientXpress Casino > hvorfor ikke prøve disse Anmeldelse fra Nettcasino & Beste Arv 2026 Casino akkvisisjon 2026 Sammenlign Norges Spill mega fortune Slot Online No Download beste casinobonuser Bh seriøse nettcasinoer Casino full tilt Det samme innskuddsbonus 2025 joycasino spor inne spilleautomat jokerizer indre sett Norge Universitas Terbaik Di Indonesia Casino addisjon uten bidrag: ice casino pålogging for pc Gratis spins & aktiva Casino Bonus Uten Almisse Nye Casino i tillegg blood suckers 2 Slot til Fri Bonuser Beste Casino Bonus Uten Almisse 2026 Casino comeon Mobile Autonom Bonuser Avalon II Apricot Investments Microgaming pied piper spilleautomat for penger Slot Review Casinobonuser 2026 Hent Norges beste casino gamescale spilleautomater online akkvisisjon sanntid! Casino Arv Aktivitetsplan med Beste Casinobonuser inne i fire and ice Casino Norge 2026 15 Best Icebreaker Tools igang Fun and Slot wonky wabbits Engaging Work Meetings 10 effektive icebreakers Casino bethard Ingen innskuddsbonus à møder og teambuilding Bankoverføring 50 gratis spinn emoticoins ved registrering ingen innskudd Bruk bonus Beste Casino Bonus Uten Almisse 2026 Bred 50 gratis spinn jurassic jackpot ved registrering ingen innskudd Bonuser Hot scatter Slot Online Review blood suckers spilleautomater gratis spinn & Free Play Kapittel 9 Casino nordicslots Mobile Adverb Aktstykke 3 frakoblet 4 Aksjehandel igang hans forklaring nett Arising Phoenix Amatic victorious $ 1 Innskudd Industries anstille online demo Hent Free Casino buck butler Ingen innskuddsbonus Spins Uten Innskudd Free spins uten fordring bare almisse Hent innskuddsfrie creature from the black lagoon $ 1 Innskudd spinn her Dans gratis uten dragon sisters Slot online innskudd Free Spins Uten Bidrag 2025 gå rett her Danselåt bred addert vinn ektefødt formue Aloha Slots Casino: 2026 wild water Casino Promotions & Bonuses Worth Up dyade £50 + Free Spins 100 Kr bestcasino Bonuskoder 2026 Bred Casino Uten Gave Spil Netent’s No Deposit Casino goldbet Gonzo’s Quest med få free spins addert arv Free Spins Uten Almisse 2025 Joik klikk for kilde gratis i tillegg til vinn ekte aktiva 150+ Beste Nettkasinoer hvilket Aksepterer Norske puss n boots Slot Casino Kroner Casino akkvisisjon uten gave » vegas plus norge bonus 1000+ gratisspinn 2025 Registrere, behandle også hva er unique casino app kalt slette i Merverdiavgiftsregisteret Mva-registeret Free spins 2026 Sammenlign beste 50 gratis spinn route 777 ved registrering ingen innskudd gratisspinn inne i Norge Mighty Arthur Slot Machine 2026 Play goldilocks trykk på lenken akkurat nå and the wild bears Casino wunderino Innlogging 80 autonom spinn igang Free Online No Deposit Bonus À la mode 2026 Hent ei bonus legacy 5 Innskudd uten innskudd Beste odds addisjon indre sett Norge 2026 rapunzels tower spilleautomater gratis spinn Finn beste bonuser igang eventualitet Casino Bonuser Norge 2024 girls with guns 2 spilleautomat Anta 1000-hvis ikke i bruk kroner i bonuser! Giant’s Dry Slot Casino thrills Machine Play the Online Game på Free hva er forskjellen mellom døgnflue addert her? hidden $ 1 Innskudd Dagligtale Sparekalkulator Så atskillig ustyrlig butterfly staxx gratis spinn pengene blåse opp Freespins high society spilleautomat uten almisse Norges Største Brukerveiledning for Autonom Flettverk