/** * 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 Jeff Bennett RoyalGame Hrvatska Wikipedia Waarom kiezen voor Beste Online Casino Zonder Cruks? Een eerlijke review over winkansen en Concrètement, les sites avec se servent vos gaillardes en tenant financement decretees à l’égard de aubaine dans zeus Beste norske casino: oppdag trygge nettcasinoer med gode bonuser i 2026 The ultimate guide to real money slots at Online Pokies NZ 2026: Strategies for Neosurf Casino Australia: Navigating the best online pokies and safe payment methods बिना डाउनलोड किए 21,750+ मुफ्त ऑनलाइन जुआ खेलों का आनंद लें Esto implica cual completo deportista trabaja la partida distinta y los premios dependeran sobre sus apuestas Suelen ser correctas para algun estacion pequeno de climatologia y no ha transpirado dirigidas a seres bien registrados Las bonos de giros sin cargo por asignacion resultan extremadamente solventes acerca de Espana A beginner’s journey into PayID Pokies Australia: Tips for safe and enjoyable gaming Ofrece celeridad, fiabilidad asi� como compatibilidad a la mayoria de operadores regulados Luotettava kasinopelikirja, Mr Bet pelaa iOS kasino jolla on yli 31 vuosikymmentä kokemusta Discover the Thrills of Slotonauts Online Casino UK 25677333 Cuanto mas variados sean las bonos (bono sobre tanque, giros gratuito, cashback, programa sobre lealtad, etc Con el fin de comenzar, joviales su bono de bienvenida obtendras 100% inclusive 100 � sobra 500 tiradas gratuito Greatest You -nettikasinot 2026 Tarkistettu, Rankattu ja Tutkittu Mythen über das Glücksspiel Was jeder glauben könnte, aber falsch ist Get started at Fast Withdrawal Casino UK 2026: essential tips for fast payments and ten Most useful Bitcoin Baccarat Web based casinos in america for the 2026 Top Bitcoin & Crypto Gambling enterprises Playing inside July 2026 Selection of Crypto Gambling enterprises that have Bitcoin inside Canada 2025 Best Quick Withdrawal Crypto Casinos inside 2026 Better 15 Crypto Casinos inside 2025 Up until now: Huge Incentives, Punctual Profits & Complete Confidentiality Bitcoin Reports Top Crypto Casinos 2026: Most useful Bitcoin & No-KYC Internet sites Rated Greatest Crypto Casinos 2026 Crypto Local casino & Betting Internet Better Crypto Casinos 2026 Bitcoin Gambling establishment Feedback with Clips Evaluation 21+ Top Bitcoin & Crypto Casinos & Gaming Web sites United states of america 2026: Ideal Picks! Top Bitcoin Gambling enterprises: Ideal Crypto Casino Sites September 2025 Modify Most readily useful Crypto Gambling enterprise Internet sites 2026: Finest Crypto Gambling enterprises Finest Bitcoin & Crypto Gambling enterprises To tackle inside July 2026 Greatest Bitcoin Casinos 2026 Most readily useful Crypto Gambling Internet sites Most useful Casinos on the internet Real money Playing Websites for 2026 Top Binance Money Casinos when you look at the 2025 Ideal BNB Betting Sites Reviewed An informed BNB Gambling Web sites! An educated Big-time Gaming Casinos getting People during the 2026 Finest Web based casinos inside the 2026: Most readily useful 15 A real income Web sites Big time Gaming 452+ Finest Gambling enterprises and you can 78+ Harbors 2026 A lot of money Bandits Megaways Slot Free Demo Play or Real Money Greatest Online casino Bonuses and Promotions 2026 Finest A real income Web based casinos to try out in 2026 Non-GamStop gambling enterprises give prompt subscription and you can access immediately to online game, often without the need for verification These types of also provides promote members to go to the net casino’s platform much more frequently Discover the best online casino Canada 2026: Your guide to safe payments and fast By doing so, it passed our strict checks that every venue experiences That is being among the most rewarding local casino no-deposit added bonus even offers in the business NetEnt is known for performing a few of the most funny and book online slots games I merely highly recommend local casino web sites with large desired also provides and you can very satisfying promotions For example templates, like dream, excitement, films, headache, good fresh fruit, space, plus The net gambling landscape is actually teeming that have programs, for every single providing book incentives and promotion also provides