/** * 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 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 Most popular Sports Invited Incentive 100% doing five-hundred �/$/? Tens of thousands of Casino games on the Earth’s Top Business Los casinos realizan un monton de viable por sostener dichosos a los personas Banking typically aids common card and e?bag rails having quick places, while you are distributions is actually canned once basic verification 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 Estrategias Sobre Tanque Metodos De Retiro indice sobre texto Inicio de Semana Colmado de Tiradas Gratis con el fin de Slots Pacote sobre boas-vindas: Ate �450 + 250 Rodadas Gratis ?? Nine casino consejos de juegos y no ha transpirado desarrolladores sobre programacion Dicho medio es fiable, sencillo de usar y tenemos referente a dispositivos moviles Guía para disfrutar de Bonuskong Casino: Estrategias y consejos para ganar 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 The site are going to be accessed in English and you can Danish languages Jak zacząć grać w ChanceBit Casino i cieszyć się rozrywką online You to definitely fortunate member won nearly �20 billion towards the Super Moolah Mega from inside the , and you will Jackpot Large handed individuals ?9 Yellow Stag Gambling establishment Falls One of the most Competitive Incentive Menus Available Играйте и выигрывайте с Pinko казино Кыргызстан! Where to find the best Web based casinos for real Money Die besten Spiele im Casino Ein Überblick über die Top-Optionen Cost-effective solutions for enhancing IT security without breaking the bank İrəliləyişli strategiyalar Kazinoda qələbənin sirrləri nədir Could you put less than ?5 and enjoy harbors? Bankrolunuzu necə effektiv idarə etməli How to Win with High-Stakes Casino Strategies El lapso sobre procesamiento puede diferir en funcion de el doctrina elegido y de su informacion requerida Del ningun dentro del cinco: ?En que consiste la ruleta en internet Chile de mayor popular? Anavar i Bodybuilding: Hvad Du Skal Vide ?Empecemos por el principio Es Magento Asi� como Por que es Significativo De Procesadores Sobre Paga? Recuerda: Un casino es con el fin de usar, no para arruinarte Sobre como Empezar a Apostar: Sometimiento movernos Inicio sobre Sesion Unase a los contenidos especificas de Slotwolf Casino: ?Gane a lo enorme para el resto de festividades Chile! Home