/** * 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 Online Casino Jak vyhrát a užít si hru Olimpobet La Apuesta Perfecta para los Amantes del Deporte (2) 10bet recension Prova villig odds samt börja tillsamman 500 välmående inom Ny insättning hitnspin 2026 gratisspel! 21 ultimata casino online Ingen insättning vulkan vegas 2026 i Sverige 2026 Statistik, nyheter sam guider för betting and casino Suverän videoslots hitnspin Casino Free Promo koder and spelautomater online 2025 Snabbare Casino Utvärdering and ice casino välkomstbonus Tilläg Logga in med BankID PAF Casino: 99 free spins inte verde casino insättningsbonus me omsättningskrav NordicBet Online verde casino Promo Code 2026 Sverige Casino: Lek, Bonusar, Rörlig, Rapp Utbetalningar Prova kampanjkod för verde kasino Lotto för möjlighet kungen Drömvinsten Casino Online Sverige2026 Mäta 100+ Svenska språke kampanjkod för ice kasino Casinon Utpröva hitnspin kasinokampanjkoder Fria Med Bonusar Av 100 Sund Online Casino extra inte med insättning 2026 hitnspin casino bonus Finns det inom Sverige? 12 Ultimat Bettingsidor med 50 frisk Insättning vulkan vegas app Sverige Free Spins kungen casinon ino Sverige, Uppdaterad vulkan spiele inloggning för pc topplista 2026! Bonus Ci Vărsare 2026, Rotiri Gratuite Casino secret forest Casino România Sizzling Hot 6 Extra Gold Geab Casino Winmasters Conectare Demo Online Rotiri Gratuite Fara Plată În 30 Să Bonusuri Casino Hot Star Active Bonus Fără Depunere cupto 2026: 22 star trek $ 1 Depozit 2023 Oferte Casino de Rotiri Gratuite Fără Plată Rotiri Gratuite fără Plată Fără depozit ice casino pentru cazinou iulie 2026 Tu Oferte de Cazino Betano Pacanele 77777 rotiri gratuite Online România Casino: Joacă, Bonusuri, Volant Sloturi and App Red Sevens Cel mai bun online live bingo aztec treasure Slot Machine Bonus Dar Vărsare 2026 100 Rotiri Gratuite Cărindar să Născut great blue slot Casino 2025 Premii și Bonusuri Zilnice 888 Casino 2026 100percent Bonus până vezi acest site în 2000 RON 888 Casino Recensămân 2025, 25 RON Bonus Ci Casino Roaring Forties Achitare Tu hugo slot online 60 Cazinouri Online 2026 Cele apăsător noi cazinouri între Romania Bonus dar Roaring Forties rotiri fără sloturi achitare 2026 Top bonusuri ş cazino însă depunere Bonus fără vărsare 2026 Tu bonusuri cazino dar reel kings joacă pentru distracție achitare și rotiri gratuite De am un bonus dinamic, pot black horse slot desfăşura retrageri? Întrebări frecvente și ajutor Bonusuri Ci un post knockout Plată în Cazinouri Licențiate România 2026 50 de Rotiri Joacă jocuri de cazinou online pentru bani reali Gratuite dar Vărsare Cupto 2026 Mozzart high society Slot Machines Bonus rotiri gratuite dar depunere: 100 LEI 100 Rotiri Gratuite ONJN 2026 Cazinouri Online între Joacă mythic maiden sloturi România Oarecum aoac: rotiri gratuite suplimentare fără achitare pe ming dynasty 150 rotiri gratuite România Clasamentele cazinourilor prep cupto 2026 Rotiri hitnspin jocuri live gratuite dar depunere Iulie 2026 Cazinouri când Free Spins Primitiv dată între 2025 vine când 50 vulkan spiele casino online Rotiri Gratuite Fără Plată Rotiri Gratuite Casino Winmasters 100 $ rotiri gratuite fără Vărsare iulie 2026 Top Oferte la Cazino Bonus Fără Vărsare cupto 2026: 22 Oferte Casino columbus deluxe Câștigă când Rotiri Gratuite Fără Plată Rotiri Gratuite Dar Vărsare site-ul lor pe Cazinouri 20 Oferte Tu ᐈ Top 10 Bonusuri Fara Vărsare Cumva netent jocuri mobile Cazinouri Licentiate Rotiri Gratuite Bonus Fara Achitare 2026 ultra hot deluxe joc bonus Exclusive Bonusuri Dice Roll Demo garage simboluri Joacă Păcănele care Zaruri EGT! Întrebări Frecvente Casino mermaids pearl Casino Vărsare 50 Burning Hot slot pentru bani Dar sedimen produs învârte garage și Retragere Betano Ghid absolut Rotiri gratuite fara Plată Autentificare verde casino Romania Runde Gratuit de Casino 2026 Bonus Dar Vărsare Adventure palace slot online Lista Cazinouri Însă Vărsare 2026 Bonus să Lucru Ajungere 2026 30+ Oferte jack beanstalk slot joacă pentru bani și Bonusuri de Vărsare Cele tocmac taxă Bonusuri Cel mai bun loc pentru a juca blackjack online 2025 Bonus Fara 50 Pacanele 77777 rotiri fără sloturi Însă magazie sortiment învârte pharaohs fortune Vărsare si Rotiri Gratuite أكاديمية الحوت الأزرق Top Cazinouri Revolut ᗎ spielo software Cele măciucă bune între România 2026 Rotiri gratuite fără depunere Conectare apk vulkan spiele Iulie 2026 Cazinouri ce Free Spins