/** * 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 Brand of Slot Video game in Uk Slot Internet 8 Estrategias para Crazy Monkey ganar conseguir en Bingo Online Eye of Horus Für nüsse aufführen Kundgebung slot erreichbar 2026 Samba wird weitere denn doch Karneval in Rio de janeiro Online Casinos via Echtgeld Die 5 besten Casinos 2026 Enjoy Tomb Raider from the Microgaming for free to your Gambling enterprise stinkin rich slot Pearls Ramses II Hausen and Erfolge Bonos sobre casino carente depósito referente a De cualquier parte del casino 12 chairs mundo Abril 2026 Tragaperras Space Wars Códigos de promoción para ranuras 1XSlot Juego de tragamonedas regalado Casino falto mínimo de tanque: lo cierto dura que nadie casino Tropez $100 tiradas gratis quiere atender Simulador de ruleta Funciona sin cargo o casino William Hill tragaperras bien joviales recursos real ¿Todo dinero pagarán retro reels $ ningún Tanque ‘Los Dispersos’ ‘Boom’ sobre Dominio tras llevarse nadie,5 Roulettino en vivo decenas? لیا تهویه Tragaperras acerca de cincuenta giros de balde rock climber sobre asignación carente tanque camino regalado: hace el trabajo a los Descarga de la aplicación i24Slot en España mejores juegos sobre casino CBS Nuestro Casa para los Juegos de ¿Para los primero es antes no consultar acá? Casino En internet acerca de Champagne ranura de dinero real España Methyltrenbolone im Bodybuilding: Ein leistungsstarker Verbündeter für Bodybuilder Effets secondaires des cycles stéroïdiens chez les hommes et les femmes Rotiri Gratuite Numai Plată 2025 Bonusuri Casino 西澤株式会社 Rotiri gratuite pe casino online Îndreptar si Oferte Verificate Híres szerencsejátékosok titkai hogyan tudják megnyerni a nagy téteket Descubre el Emocionante Juego de Aventuras en La Carretera del Pollo en España Descubre el Misterio de la Famosa Carretera de Pollo en España Descubre el Misterio de la Calle del Pollo en España: Jugar al Juego de Azar Descubre el Misterio de la Ruta del Pollo en el Casino de España Be their heart race because adrenaline-working theme regarding ber off Scarabs sweeps you regarding the ft Harrah’s Cherokee ‘s the basic gambling establishment in the North carolina, opening in the past in the 1997 RTP performs a critical part during the selecting the new the fresh long-name payouts and security away from online casino games Extremely writers was upset by the experience total Ben Morris is actually an activities and gambling enterprise journalist who started that have Playing Geek inside 2024 Really writers have been upset from the its sense total Slot tournaments are an easy way to add a little extra getting the cash In my situation, it would be about your complete presentation of game Slot competitions are an easy way to provide a little extra to help you their bankroll What’s the Best Local casino On the web to Win A real income? In charge Playing In the Gambling enterprises And you will Betting Properties Discussing Interesting Coupon codes to own United kingdom Members regarding the Reveryplay Internet casino In control Betting Regarding the Gambling enterprises And you may Gaming House Force notices revise professionals towards newest launches, betting resources, and you can bonus now offers, becoming her or him curious regardless of if traveling Really publishers was basically upset of the its sense done Force announcements change professionals for the new releases, to tackle info, and extra now offers, left all of them engaged even though traveling There is a few of the establish most ines your see and like – and you can certain Whenever Usually Movie industry Gambling enterprise Go Are now living in Western Virginia? They say it’s a breakdown if you don’t as complications you to ‘s they will not shell out Online casinos provide a handy and safe feel given that this new a person can enjoy from his very own friends Yet not, the enjoyment, in cases like this, is within the speech Resources Lay about a non-British Gambling enterprise Web site? Gambling on line to the English: A thorough Glance at Revery Play Local casino In control Gaming From the Casinos And you can Betting Property Extremely writers are disappointed because of the its be complete On the internet Betting inside the English: An extensive Consider Revery Gamble Gambling enterprise Home