/** * 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 The site are going to be accessed in English and you can Danish languages Home Estrategias infalibles para triunfar en chicken road y mejorar tu rendimiento en juegos de azar Blackjack Kalkül Die Traktandum 5 besten Strategien je das Online Spielsaal! SEPA im Erreichbar Spielsaal Banküberweisung reibungslos erklärt Echtgeld Blackjack online zum besten geben: Geprüfte Casinos 2026 Tagesordnungspunkt 10 Sofort Casinos qua schnalzen Auszahlungen Beibehalten Die kunden etliche von 9 bis 9.1, ist welches der Unentschieden Unsereins in frage stellen kaum spezifischen Behauptungen, hier nachfolgende Meinungen der Rezensent deren eigenen sie sind Enjoy playing och exploring hypothese timeless game titles through Python! Inside ten Eur Erfolg spielst du 525 Euronen von (12 ? 35) Cazinouri Online nv casino Verificate & Bonusuri Exclusive Understanding legal protections in casino gaming operations VulkanVegas 50 Free Spins: Wykorzystaj je, nv casino by zyskać! Casino 25 Euro No Deposit Få Din Bonus I Dag! Exploring the Dynamics of Casino Games A Comprehensive Overview Must-Try Favorite Casino Games Mastering the art of casino strategies a step-by-step guide to winning 50 Freispiele Bloß nv casino Einzahlung Auf anhieb Verfügbar Anavar i Bodybuilding: Hvad Du Skal Vide Speak about a knowledgeable Uk Gambling enterprise No-deposit Incentives Obtainable in 2025 Costa Rica Melbet Bonus Password 2026 thunderstruck wild super trial 1750 + 290 FS אופנת יהלום Eye of Horus Protestation Aufführen Slot ohne Eintragung Comprehensive Overview of Slot Games History, Mechanics, and Strategies Experience the Thrill of CasinoJoy UK Your Ultimate Online Gaming Destination Nachfolgende besten Echtgeld Casinos: Damit echtes Bimbes seriös zum besten geben 2026 MyBet Spielsaal Ist Sera Betrug ferner Seriös Nine casino consejos de juegos y no ha transpirado desarrolladores sobre programacion Most popular Sports Invited Incentive 100% doing five-hundred �/$/? Dicho medio es fiable, sencillo de usar y tenemos referente a dispositivos moviles Tens of thousands of Casino games on the Earth’s Top Business Banking typically aids common card and e?bag rails having quick places, while you are distributions is actually canned once basic verification Guía para disfrutar de Bonuskong Casino: Estrategias y consejos para ganar Genau so wie guy anfangt inoffizieller mitarbeiter Online Spielsalon unter zuhilfenahme von Handyrechnung ruckverguten dahinter geben Uber einem Paysafecard Spielsalon man sagt, sie seien Diese unter ein sicheren Flanke Sekundar der Reload Vermittlungsprovision darf ihr attraktiver Paysafecard Spielcasino Bonus werden Spielcasino qua two hundred fifity provision � Duck Towards Lot of money Returns Totally free Revolves No-deposit 2026 step one,000+ A lot more Revolves Los casinos realizan un monton de viable por sostener dichosos a los personas Pacote sobre boas-vindas: Ate �450 + 250 Rodadas Gratis ?? Din enkla guide till att komma igång med Bonuskong Casino för nybörjare Buck Sign Symbol lucky 88 slot no deposit $ Definition, Uses, and Instances Iron-man 2008 film funky fruits app iphone Wikipedia three dimensional lightning link daily free coins Harbors Gamble three-dimensional Slot machines On the internet Betfouru Casino im iGaming-Trend 2025: Was neue Entwicklungen bringen Betfouru Casino: Der Mythos, dass Gewinne garantiert sind, und die Wahrheit dahinter Errores que nunca debes cometer en Betfouru Casino Step-by-Step Guide to Winning at Powbet Casino Estrategias Sobre Tanque Metodos De Retiro indice sobre texto Inicio de Semana Colmado de Tiradas Gratis con el fin de Slots