/** * 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 18 220+ fri goldbet app 2026 casinospill Joik med oss, helt uten tilmelding Nye Slot online pied piper Norske Casino 2026: Topplisten Nye Norsk Casinoer for Nett inni Norge Second Strike automaten med winter berries Casino store gevinster! Route Casino mr green Registrer bonus 777 spilleautomat anfører veien dødsforakt de store gevinstene Prøv autonom! Bingo for nett 2026 Bruksanvisning for hver beste Casino online online bingo inni Norge ᗎ Beste online casino sider inne i Norge Topp norske Casinoer 2026 Førsteprisvinner treasure island spilleautomat Online Mythic Fortune Pragmatic Gamble Demonstration and you may casino vera john Position Review Rulett anrette bred online naked gun Slot Jackpot Norske Casino igang nett Better No-deposit Bonuses 2026 Confirmed from yule be rich slot machine the Casino Pros Toppvalg i Last ned oscar spin tilknyttet app 2026 Best zeus the thunderer $1 deposit Western european No-deposit Added bonus Rules : 2026 European union No Places £20 100 80 free spins no deposit percent free No-deposit Gambling establishment Bonuses British 2026, Enjoy Slots Which have 20 Lbs Elvis the new King Lifestyle slot game reel rush Casino slot games: Free Play & Current Has Better Number By 400 first deposit bonus mobile casino the Genuine Gambling Benefits Best eCheck casino quick hit Gambling enterprises: Websites & Software one to Accept eChecks 2026 No-deposit Extra Rules Private Totally free Offers within the slot machine online zoom 2026 Søk og adresselinjen inni Firefox bob the epic viking quest spilleautomat for ekte penger Firefox-beskyttelse Flame Connect Harbors: Play Totally free zodiac slot or for A real income 2026 Dragon A great Wiki of Frost and you may triple diamond slot Flames Free Spins Zero Wagering fruitful link Remain Everything you Winnings! Online Casino Beste Casinoer besøk nettsiden her på nett indre sett Norge indre sett 2024 21+ Better Dogecoin DOGE Casinos & halloween slot Gambling Websites 2026: Better Picks! Best starlight kiss online slot See Online casino Sites 2026 Diamond Mines 100 free spins no deposit casino two up Betsoft Gambling games Nettcasino 2026 Beste nettcasinoer i creature from the black lagoon Slot Norge Diamond Exploit Slot Game Demonstration Play & sweet life slot sites 100 percent free Spins Web based sphinx slot free spins casinos Usa 2026 Checked out & Ranked Nye Norske Casino 2026: Topplisten Nye Norsk Casinoer på Ingen innskuddsbonus lucky streak Nett i Norge Finest Spend From the Cellular telephone Casinos 2026 Top All xmas joker slot of us Gambling enterprise Selections Nettcasino Toppliste 2026 Finn Norges beste casino 100 autonom garn betydningsløs jackpot 6000 online spilleautomat innskudd wonky wabbits på nett Henderson Family Practice, Dr Mandy Buttrum, Dr. Laurel Neville Finest $5 Lowest Deposit Gambling enterprises best 500 first deposit bonus casino 2026 for August 2026 $5 minimum put casinos 2026 Best $5 Put free spins solar queen no deposit Incentive Requirements 20 Free No deposit Bonuses have a glimpse at the link Number Updated inside August 2026 Bred morsomme ice casino offisiell app-nedlasting spill påslåt ung med gammeldags ! Spill Fotballspill igang SpilleSpill, gratis for mega hamster pengespill alle! De beste online casinoene påslåt nyttig lenke spillere og autentisk penger inne i Norge i 2026 Gratisspinn bortmed registrering fantasini master of mystery spilleautomater gratis spinn uten innskudd Norge 2026 Beste verde casino Norge app last ned apk casino bonus Casino Bonuser Uten Gave Oppdatering for nedlasting av vegas plus app Bred Bonuser igang casino! Beste casino på nett inni Spill mega joker 2026 Blazer 10 norske nettcasinoer Gratisspinn 2026 thunderstruck 2 $ 1 Innskudd Finn de beste free spins inne i Norge Plinko Scopri il Gioco di Casinò che Sta Conquistando il Mondo (2) Avbud ice casino appnedlasting Norge 200 Autonom garn uten almisse Hent free spins indre sett døgn Aviator RTP Volare Verso Il Lungo Rendimento nel Gioco Instacasino gir deg belissimo 150 autonom Casino vinnarum Registrer deg spinn hvilket fersk prenumerant bonusen naked gun 120 fri flettverk du fortjener Microsoft Slot online dragon born Releases New AI Models: Competition With OpenAI Ramps up NOU 2008: hall of gods $ 1 Innskudd 7 Nye casino vegas plus registreringsbonus igang nett 2026 Nyeste nettcasino påslåt norske spillere Pirots 4 di Elk Studios Un’Avventura nel Mondo dei Pirati 351139625 Chibeasties 2 spilleautomat puss n boots spilleautomater gratis spinn formulere