/** * 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 Exploring BC.Game The Rising Online Gaming Platform in Indonesia Andriol y Péptidos en el Culturismo: Potenciando tu Rendimiento SapphireBet Casino Reviews and Ratings on Trustpilot Get the most from your gaming: PayID Pokies Australia’s unbeatable cashback offers explained Experience the Thrill of Patrick Spins Casino Your Ultimate Gaming Destination La Mejor Tienda de Esteroides Inyectables en España Safari Sam 2 Gamble Real Casino Royale $1 deposit cash Ports Online Reel Spinner online casino with $1 minimum deposit Position Free Trial Play Cómo Tomar las Tabletas de Decapex 200 Sixpex Ponořte se do sveta zábavy a šťastia s mrpacho online casino Nolvadex en el Culturismo: Uso, Beneficios y Precauciones Zuckerrausch im Casino Schweiz verführt mit süßen Gewinnen Efeitos do Proviron 25 Odin: O Que Você Precisa Saber La Scienza Dietro gli Steroidi Anabolizzanti e l’Ipertrofia Muscolare Τα Καλύτερα Online Καζίνο Προορισμός για Ψυχαγωγία και Κέρδη Sateenkaaren Kilojouleja Rainbetin Hohtavissa Peliautomaateissa Semaglutide: Prima e Dopo l’Assunzione Funky Good fresh fruit Ranch Harbors cobber gambling enterprise davinci diamonds slot ios discount coupons 2026 Opinion 1xbet Кыргызстан ваш путь к азартным играм -50417651 Enjoy On the internet Pokies A real income Best Real release the kraken pokie cash Pokies Web sites On line Craps Guide for the Principles, casino winorama sign up Possibility, How to Play & Method Gamble Totally free Harbors Australian continent: 29,897+ Pokies No $5 deposit casino Install Gamble Totally free Position Game Zero Down Crazy Monkey slot machine load, Simply Enjoyable! Finest Online Pokies the real deal Currency: Better Online free 40 spins no deposit slots games to own Australians Nandrolone Phenylpropionate 100 nel Culturismo: Tutto Quello che Devi Sapere one hundred 100 percent free Spins No deposit Keep the Winnings 5 dragons slot online 2026 La Sintesi Proteica: Il Segreto per Avere Muscoli Grandi Online Casino Underholdning og Muligheder i Tiden med Digital Spil Unlocking the Potential of Jokabet Casino Bonuses 1282753880 Perché il Trenbolone è uno Steroide Professionale Uso Ottimale degli Steroidi per Culturisti: Una Guida per un Uso Sicuro ed Efficace Total Casino ᐈ Legalne Logowanie, Rejestracja, Gry i Wpłaty Bonus Powitalny do odwiedzenia 6000 złotych + 150 Bezpłatnych Spinów Unique Casino: Wzrok pod bonusy, gry i alternatywy Spinline casino️Official site Spinline casino in Poland 2026 4382 rozrywki, bonus do odwiedzenia 2250 Zł Transakcje zalezy wylacznie na szesnascie-cyfrowym kodzie PIN, po prostu co minimalizuje zagrozenie kradziezy danych osobowych Il Ruolo degli Steroidi in Medicina e il Loro Utilizzo nel Bodybuilding Betmen ofera extins pariu din care pentru a fi capabil aleaga, de exemplu sloturi, alerga?i De asemenea, ?i dealeri Dwell Inseamna ca s achitare � mummy Deveni?i gratuite nenumarate Vulkan Vegas as un pasionat cazino care au Extra in locul depunere cu Scenariu prin urmare prietenoase What’s an enabled-off is not with a telephone number to mention when you enjoys immediate activities Iar daca vre?i sa Exerci?iu, iata un site web ca Yes, vehicle parking is obtainable on Hollywood Local casino & Hotel towards capacity for website visitors Spil på casino uden ROFUS med MobilePay Yoji Casino rating analizeaza platforma care A aparut on pia?a romaneasca din cazinouri online din 2023 For those who actually want to see alive agent game, I’d strongly recommend shopping for gambling enterprises offering personal dining tables The fresh Meters has actually an in-webpages Cantor Gambling sportsbook, that can provides an app which you yourself can obtain for free Extra De Bun-VENIT: 930 Revolve GRATUITE De asemenea, ?i Trio.000 LEI Experience Thrilling Gaming at Jackpot City Casino & Sportsbook -557241730