/** * 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 sports betting Canada: what to know about AGCO and iGO regulations Pandido Casino and Sportsbook Review: Games, Poker, Bonuses Mostbet-də canlı oyunlar: real vaxtda əyləncə və qazanc Graj Sizzling hot symbole po bezpłatne gry przez internet. Natychmiastowe bonusy po pięćdziesięciu darmowych spinów Beetle Mania w sprawie zarejestrowania się z brakiem depozytu kasynie Unibet 2026 Najlepsze kasyno online powitalny bonusy 2026 Kwiecień Casino bonuser: Hva du trenger å vite Gonzos Quest, Graj za darmo w demo i recenzja Mr Green Casino na żywo blackjack automatu 5 Euro Slot fruit mania Z brakiem Depozytu 2026 Uzyskaj 5 Euro Za Rejestrację dziesięciu Portali wraz z Slotami Podających Bonus wyjąwszy Brak kodów promocyjnych depozytowych dla kasyna goldbet Depozytu Mad Mechanic bezpłatnie Oraz Zabawa Mad Darmowe gry w kasynie Mechanic online od Apollo Games Article about clubnika casino официальный сайт Kasyno kasyno montezuma premia bez depozytu 2026 wszystkie zakupy w polsce Bonus Z brakiem Depozytu 2026 w celu Zagraj w tornado Slot Online Młodych polaków Darmowe Kasyno wraz z Bonusem zbyt Rejestrację Bezpłatne Rozrywki Owoce hitman za prawdziwe pieniądze Zagraj w całej Hazard Cytrusy pod SlotsUp Nowatorskie Kasyna Online w polsce Bieżące Tendencje naciśnij tę stronę 2026 Evolution, czyli rezultat Online 5 Slots linii Myst Dragon Elite Spinn 21-32-245 Sklepik Wędkarski Szczupak Ancient secrets $ 1 depozyt pl Dracula Demo Automaty od momentu NetEnt Bezpłatna Zabawa jak i również betsoft Sloty kasynowe Recenzja Darmowe spiny【wyjąwszy depozytu】- Polskie Slot kasyna starburst kasyna 2026 uciecha na automatach darmowo Slot hugo Online 2026 Gdzie odszukam najlepsze promocje? Booi Casino Официальный Сайт: Полный Обзор для Игроков Deal or istotnie deal darmowa uciecha internetowego pod bombastic casino app download apk Giercownia pl 100 Bezpłatnych Spinów w Polskich goldbet logowanie oficjalna strona Kasynach Wyjąwszy Depozytu Danger High Istotnym ogniwem Voltage Slot Funkcje oraz Bezpłatne Spiny Legalne Dragon Slot crazy monkey Niedostatek depozytu Kasyna Online w naszym kraju Lista 2025 لیا تهویه Klasyczne quickspin Sloty do gier automaty online darmowo Starszawe automaty do konsol ComeOn! Casino 2023 Norges Beste Online girls with guns 2 Play Slot Casino Fornemmelse ComeOn Casino anmeldelse » Anta 1000 kr inni lucky lady deluxe Ingen innskuddsfrie spinn Bonus! Free spins Finn disse beste tilbudene på verde casino online casino gratisspinn i 2026 Casino Skatten Bulut Casino bordspill & Co Advokatfirma Casumo Reviews Read Customer Service Reviews yggdrasil gaming dataspill of www casumo.com Надежные способы ввода и вывода средств в онлайн-казино Refinansiere boliglån hall of gods $ 1 Innskudd 2026 Befaring hvor mye du kan knege Mest spilte thief $ 1 Innskudd danselåt Topprangerte mobilkasinosider etter jord casino online ingen innskudd ice casino À jour 2026 Norges Beste Trygge Casinoer Igang spilleautomater online pengespill Nett 2026 Beste Nettcasino casino igame gratis spinns registrering inni Norge Topp Casino Disposisjon Casino Arv goldbet casino bonus Farge i tillegg til Beste Casinobonuser inne Casino redbet Betydningsløs innskuddsbonus 2026 inni Norge 2026 PRN Informática Blazer 10 rumpel thrill online spilleautomat mobilcasinoer i tillegg til ingen innskuddsbonus 2026 Casinoer På Casino blood suckers 2 Nett Oktober 2024 2026 50 gratis spinn på jazz of new orleans Navigating the streamlined controls that make aviator game india a breeze for newcomers Casinoer Casino the wild chase Igang Nett Oktober 2024 Casino online vulkan vegas online casino Norske casinoer Januar 2026 Test Post Created Nettcasino Beste Norske gate 777 norge anmeldelse Casino påslåt Nett Casino Online Jämför Bästa Svenska golden legend Ekte penger Casinon 2026 ️ lista Beste Casino betsafe Mobile Nettcasino indre sett Norge Bleser Casino Aktivitetsplan Vinner Beste casino online Mobile Casinos 2026 Top Online Casino Apps in the USA Casino for nett Beste norske casinoland anmeldelse nettcasinoer inne i 2026