/** * 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 Premio casa da gioco I migliori bonus scompiglio online del Time to bet 2026 Mobile dumps enables you to utilize cellular therefore you might be in a position to deposit and repay it on your own 2nd cellular phone declaration SlottoJam Scompiglio GET a 100% Gratifica up to AmazingBet 200! What’s the restricted amount I will set to help you an internet gambling establishment? Selection of Gambling enterprises inside Freeport When looking for your dream bonus, here are some of the biggest what to remain a keen interest into Top web based casinos getting Aussies? Web page dos Migliori casino non AAMS Italia Giugno 2026: Siti sicuri di nuovo E-play24 premio Masters provides 1 day to accept the bonus once it�s awarded Better Real time Casinos in australia 2026’s Most useful Australian Casinos 7signs confusione commento oggettiva per consigli di nuovo fonte utile opinioni personali And this Atlantic Area gambling enterprise is the better? Heres exactly what members state Better Asia Internet casino Websites : Top ten Gambling enterprises 2026 Ad esempio Avantgarde Casino detrarre le vincite nei bisca: consigli 2026 Confusione sicuri non AAMS: What sets them apart? Cerus Corporate gioco digitale Site Nuevo entretenimiento de Provider Hace el trabajo en internet Soluciona Máquinas Tragamonedas Online De balde en el caso de que nos lo olvidemos Joviales Recursos Conveniente Monopoly Casino: Consigue 25, doscientas tiradas de balde casino en el registrarte Soluciona a la tragaperras Twin Spin de NetEnt acerca de 24Spins Tom Horn Gaming: reseña del suministrador sobre juegos de casino reseñas así­ kinbet como excelentes tragaperras sobre Tom Horn Gaming Slots Gratuito En internet Tratar por Distracción Falto bwin Soltar Soluciona a los tragamonedas online sin cargo ¡Tragamonedas betify casino online de disfrutar sin necesidad sobre descargar siquiera registrarte! Los Más grandes Slots En internet desplazándolo hacia Casino GranVia bono sin depósito el pelo las Excelentes Casinos 2026 con el fin de Competir Gratuito así­ como con manga larga Dinero Real Tragaperras sin cargo Soluciona acerca de Slots online de balde así­ como wildsino desprovisto retribuir Slots En PlayToro internet Descubre las superiores tragamonedas Cashapillar Position Review & Ratings 2026 Bonus & RTP Best Online Pokies Australia newcomers guide: getting started with ease and excitement The favorable Bluish Slot for us Participants ‘Jeopardy!’ champion Jamie Ding shows their miracle in order to buzzing within the easily fifty Free Spins No deposit Extra Offers on the Membership 100 percent free Spins Local casino Bonuses To possess July 2026 No deposit Best No deposit Bonuses 2026 Finest You Web based casinos Lobstermania Position Demonstration: Totally free Play & Opinion Instant & On the web Free Pokies On the internet Best Australian Free Pokies within the 2026 United states Gambling establishment yeti casino Totally free Spins Also offers To possess July 2026: Current Number Carry out Gambling enterprises Adjust Its Slots and exactly how? Small Struck Slots Online Gamble Totally free and for prime slots no deposit bonus A real income In the House of Enjoyable , all game play uses virtual coins simply, in order to enjoy the excitement out of rotating the newest reels having no financial exposure. You might set the newest ports on fire within Rapid-fire Jackpot gambling enterprise 100percent free right now! Complete a tiny aviator casino group of enjoyable tasks instead of cracking a sweat and you may information right up honors. Collect bags and you will card to complete set on your journey to an unforgettable grand honor! This type of 100 percent free slots are the perfect choice for gambling enterprise traditionalists. Is it possible you shape slot machines? As to why it doesn’t work An kings casino login informed Australian web based casinos the real deal currency, rated to have 2025 Can a casino Control a casino slot games? Top-notch Roulette Systems & Strategies sphinx-doctor sphinx: pornhub casino The newest Sphinx paperwork creator California Indian Gambling enterprise Position Winnings On-line casino Invited Incentives 2026 betdaq Casino Subscribe Also provides Quickspin mega reel casino Supplier Opinion No deposit Casino loot casino Bonuses, Rules & 100 percent free Spins Current Everyday Cellular Harbors On the web Wager Free zero Down sportsbet io app load Jack Hammer Slot 100 percent free Play Spinny casino login within the Trial Setting FatFruit Gambling enterprise Review, NaoBet app Private 20 Spins No deposit Extra