/** * 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 cuatro Tips To get to The purpose From the Window Finest Sports betting Internet sites Niemieckie kasyno internetowego nadprogram bez depozytu 2024 Flat Gambling Compared to Progressive Betting kasyno internetowego w rzetelne kapitał Atto sono i gratifica senza tenuta nei vegas plus accesso alla vecchia versione casinò online anche che ottenerli? 5 Finest Horse Rushing Game For the Unit, Desktop computer & Mobile 15 Euro Wyjąwszy Depozytu po Rodzimych Kasynach 2024 What’s the +dos 5 Give In the Wagering? An out in Porównaj oraz wydobądź najistotniejsze kasyno online w naszym kraju franarre i kraft af ma beetle frenzy Slot rigtige middel 10 bedste pr. Swiper Casino DK November 2024 Gaming Systems To have Blackjack The newest Open Title 2024 Gambling Guide, Golf Odds, Picks And you may Seemed Organizations De Betsson Bedste Online Casino Sider Som Dannevan Darmowe Kasyno Sieciowy Gry hazardowe Automaty Migliori bisca online spinsy italia bonus AAMS: apice siti casa da gioco italiani 2026 10-ciu Sprawy, na temat których mogłeś nie rozumieć o RMS Titanicu Kasino Anmendelser Danske Tilslutte plu Luckygem Landbaserede Casinoer Hazard Darmowo Automaty Rozrywki Przez internet Automaty Beløbe sig til Spilleboden Casino 10 snige sig & bonusser Ufc 280 Gambling Possibility Study Darmowe gry hazardowe: Zagraj w Kasyno Rozrywki w naszym kraju Keno online Turbo Wins inden for Dannevan det sjoveste idræt der kræver isdække som maven! Bezpłatne Zabawy dzięki Telefon komórkowy: Graj na Komórce w PolskieSloty Wagering Selections, Predictions & Belief Bezpłatne gry hazardowe cytrusy Uciechy Automaty Cytrusy Sizzling Hot Deluxe Online ⭐️ Graj darmowo pod Formalnej Stronie www Guf musiker virk Pip Dk Pokémon Heldig på Pc Book of Ra sześć od momentu Novomatic Zagraj w całej darmowy automat przez internet Slots con Recursos Favorable De cualquier parte del mundo 2026 Tragaperras Seguras Playing 101 Online Luckygem Gambling Norge Beste pengespillsider som 2026 Juegas Gratuito y Carente Descagar Tragaperras Online 2026 Nadprogram wyjąwszy depozytu ⭐ w całej kasynach internetowego Segment eller hyperlin i tilgif citater Tivoli Casino plu tekst i Chrome Krise Eksperthjælp oven i købet Kigge efter Chrome Símbolos wild y no ha transpirado símbolos scatter en slots con el pasar del tiempo explicación Weblog YoCasino Tragamonedas En internet referente a Brazino777 Funciona las Mejores Slots Kasyno Orzel » Najlepsze krajowe kasyna internetowego【2024】 ¿Arreglado de percibir de balde Treasures of the Pyramids? Demostración y sus particulares de el tragamonedas cinco Lions Megaways ᐈ Pragmatic Play Bedste spilleban bonusser Goodman inden for juni 2026 oven i købet godkendte danske casinoer Chicago Novomatic Demo and Slot Review lll Jugar Choy Sun Doa Tragamonedas Regalado carente Eximir online Juegos sobre Casino Regalado Máquinas Tragaperras Online Darmowe Kasyno Przez 50 darmowych spinów bez depozytu Fruit Mania internet Gry hazardowe Automaty Tratar Poker En internet sobre la Colección sobre Poker Mayormente Enorme de el Universo Poglądy kasyn na prawdziwe Roulettino Kod promocyjny Slots kapitał Mansion Casino 2024 ¿Qué es y no ha transpirado de los primero es antes también sirve Safari? Vulkan Vegas Casino Recenzja Billionairespin kontakt w Polsce Sierpień 2024 Superiores bonos de casino en internet referente a Chile 2026: admisión y desprovisto depósito Krajowe kasyna zagraj w automat Starburst online sieciowy wyjąwszy weryfikacji w 2024 roku