/** * 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 Erreichbar Spielbank Über Search engine Play Saldieren In Brd Gaming-ul deasupra 2024: Tehnologii cidru-have și de jocuri tocmac așteptăm P Spielautomaten Erreichbar Kostenlos Bloß Eintragung Und Kurznachricht Erst als 20 Linien Vortragen Casinos Über 5 Einzahlung Einzahlung Bei 10 $ Besorgen Diese Zigeunern Den Prämie Von 50 $, Österreich Willkommensaktion Je einzahlung Von 10 Vortragen Unter einsatz von 50 Jocuri casino online deasupra bani reali tu siteuri care jocuri de noroc Casino Via 1 Euro Einzahlung Top 10 Casinos on the internet 2026 7,000+ A real income Sites Examined Best casinos on the internet for real money: Selecting the big on-line casino for 2026 Best Casinos on the internet Canada 2026: Canadian Real cash Websites Online casinos the real deal Money Best Casino Websites in america 2026 Australian Web based casinos One to Undertake PayPal Within the 2026 Finest Online casinos for real Money 2026 Top 10 Gambling enterprises One to Deal with Visa Provide Cards inside July 2026 Charge Repayments in the Us Online casinos: Dumps and Limits Bonus Dar Achitare 888 Sport iulie 2026: 22 Oferte Casino când Rotiri Gratuite Însă Depunere Free Slots On the internet Play 20,000+ Trial Position Video game Casinos on the internet for real Currency Best Gambling establishment Internet sites in america 2026 Raging Rhino Position Review 2026 100 percent free Enjoy Demo PayPal Gambling enterprises 2026 Greatest Web based casinos accepting PayPal Bonus Fără Achitare Excelbet RO iulie 2026: 22 Oferte Casino de Rotiri Gratuite Fără Achitare Boku Local casino Sites, Safer Casinos One Deal with Boku The brand new No deposit Incentive Allege Fresh Local casino Also offers 7 2026 Ramses Book Deluxe Slot Opinion Play for Totally free during the VSO Cashapillar Slot 100 percent free Demonstration, Remark 2026 Rotiri ladbrokes casino gratuite însă vărsare 2026 BetUS Casino: Play Gambling games For real Currency Fruit Shell out Casinos Quick and Safer apple’s ios Gambling enterprise Deposits inside the 2025 Household of one’s Memphis Grizzlies Finest United states No-deposit Incentive Gambling enterprises 2026: Discover No deposit Also offers List A long time ago Position: Information, Totally free Revolves and more Recensămân RedSevens Continua Casino Păreri Red Sevens Better Online Pokies around australia the real deal Currency 2026 Specialist Reviews A long time ago Slot Totally free Spins and no-deposit Best Lowest Deposit Casinos inside the 2026 step 1, 5, ten Dumps Unearthing Riches: An intense Dive for the Gamomats Pharaos Money Leprechaun Happens Egypt Genuine-Go out Analytics, RTP and SRP Risk High-voltage Slot Play 96 22percent RTP, 28190 xBet Maximum Winnings 50 Free Revolves No deposit for the Sign up Continue Everything Winnings Ucz się języków opowiadając z AI 100 percent free Revolves No deposit Canada Greatest 100 percent free Spins Now offers July 2026 No-deposit Incentive Gambling enterprise Real money 2026 No deposit Incentives 2026: Affirmed and Checked Rankingi najlepszych kasyn internetowego 2024 Geisha KA Betting Demonstration Slot Wager 100 percent free Greatest No deposit Bonus Rules to possess Usa July 2026 Such free revolves also offers allows you to enjoy chose ports (constantly well-known headings such as Starburst or Big Trout Bonanza) and maintain your own payouts without the need to fulfill one betting conditions. Following that, you’ll provides per week to make the most of them before it expire, though the restriction winnings readily available will be capped from the £2 hundred, with every spin really worth lay in the 10p. The fresh bargain is actually probably better to have relaxed people whom would not like challenging playthrough conditions on the incentive finance. No deposit Gambling establishment Incentives Totally free Spins for On the web People 2026 10 Finest Public Casinos in the July 2026 Rated By the Professionals RG org Breaking Headlines and Video clips Reports to the Industry, U S. and you will Regional Basics