/** * 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 WorldMatch Slots ve ahora Play Free WorldMatch Slot Game Demos Dolphin´s Pearl Slot Video game Demonstration Play and Free Revolves Dragon Dancing Position by the Game Worldwide Enjoy Free Trial Безплатни завъртания Приложение ice casino за изтегляне на apk без депозит Хазартни компании: Uptown Aces' Най-новото безплатно Revolves Extra Objevte vzrušení ve světě Starcasinokasino CZ 54361703 Why fantasy publishers and you may filmmakers cannot get an adequate amount of dragons Бонуси без депозит със 100 процента безплатни завъртания в Ирландия през 2026 бонус bombastic casino г. An educated Casinos on the internet Philippines with Free Register Added bonus 2026 Cousin Casino Web sites 2026 Sites Just like your favorite List Objevte vzrušení a zábavu na Starcasinohrat CZ 52102421 Soluciona regalado a Multi Descarga de la aplicación PrimeBetz Hot 5 Wild acerca de manera demo Hellspincz CZ 2026 Nová Éra Hazardní Zábavy Dr Bet Withdrawal Steps inside the 2026 Objevte svět online hazardních her s Totalcasinohrat CZ 81222718 Играйте над 21 Вход в приложението hitnspin 750 онлайн казино игри с нулевото сваляне Kartackasinocz CZ 2026 – Registrace Vstupte do světa zábavy Mostbetkasinocz CZ – Oficiální online kasino 57678437 Monsterwincz CZ – Oficiální online 83614640 Good fresh fruit Tower Security down load program deceive slot fafafa Laws and regulations Cartoon March 2026 No-deposit and 100 percent free Spins Casinos 2025 Greatest No-deposit Acceptance Added bonus Gambling enterprises Personal Free Also provides 100 процента безплатни завъртания без депозит Полша 2026 без депозит hitnspin SpinMyBonus com Listed below are the top details about dolphins Objevte Tokyocasinokasino CZ Vstupte do světa online hazardu Mostbet CZ – Oficiální online sázková kancelář 23348312 No-deposit Incentive Requirements Usa Affirmed Offers July 2026 Weiss CZ – Oficiální online 25245296 Vsadahrejcz CZ – Oficiální online 80301937 Преглед на Промо кодове за казино hitnspin хазартното заведение PlayOJO за 2026 г. Ексклузивни 50 100 процента безплатен бонус Revolves Sites Such Spree Gambling enterprise One Made Our Checklist On the weekend Objevte svět Spinariumcz CZ Vše, co potřebujete vědět 93307375 Niyvi CZ – Oficiální online kasino v České republice Sus particulares sobre Lost Island mega jackpot Wazdan México: ¡el n ° ningún en acciones específicas! Monsterwinkasino CZ – Oficiální online 64911500 Wasteland Wikipedia Оценете богатството на фараоните Напълно безплатен доклад за царя на Нил hitnspin вход в България $стъпка първи депозит Опции на фараоните Mostbetkazino CZ – Oficiální online kasino 91727390 Is actually Free Davinci Diamonds Dual Gamble IGT On line Pokies Game No deposit gambling enterprise incentives Totally free gambling enterprises Roobetcz CZ – Oficiální online herní platforma pro všechny Objevte svět Spinariumcz CZ Revoluce v online zábavě Národní Kasino Vše, co potřebujete vědět o Nationalcasinokasino CZ 41781593 Tragaperras En internet PrimeBetz descarga de la aplicación apk Sin cargo Máquinas tragamonedas en internet Най-новите начини за goldbet без депозит за онлайн казина красота Monacobetkasino CZ – Oficiální online herna s bohatou nabídkou Doublestarsk SK – Oficiálna stránka pre online zábavu 47069296 Objevte svět Totalcasinokasino CZ – Nejlepší online kasino 2026 52853328 Real time Sports betting Odds, On the web Sportsbook, Gambling establishment, Racebook, BetPhoenix مائة عرض مجاني بدون إيداع يدور في عام 2026 بعيدًا عن شركات المقامرة المحترمة Greatest $5 Lowest Put Gambling enterprises inside the 2026 Rated and you can Analyzed Roobetkasinocz CZ – Oficiální online Kasino 23265734