/** * 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 On-line casino Respect Programs: Simple tips to Optimize Perks in 2025 Lithuania Web based casinos Done Set of Legitimate Sites 2026 Ranked from the Actual Professionals Greatest Web based casinos for real Profit 2026 An educated Web sites Such as for example Risk Casino Risk Possibilities 2026 Finest Liechtenstein Gambling enterprises 2026 Bonuses & Leading Web sites Most useful casino games getting grownups for the Kuwait Kenyas Prominent Online casino Finest Casinos on the internet during the Kenya 2025: Greatest Kenyan Real cash Gambling enterprises Nj Online casino List Trusted Internet sites and you will Professional Product reviews 2026 On-line casino Bonuses within the The japanese July 2026 Most readily useful Casinos on the internet when you look at the The japanese to possess 2026 Top Internet Ranked Local casino On line AAMS ADM Lista dei Migliori Siti scam Licenza Rated And you will Assessed! Better Web based casinos within the 2026: Most useful 15 Real cash Internet sites Greatest Web based casinos 2026 Best Gambling establishment Websites Rated Best Casinos on the internet the real deal Cash in The japanese【2026】Bonus&Ideal 15 Ranking ten Top On-line casino Real cash Internet sites when you look at the Us having 2026 Best Online casinos to have United states of america People 2026 Greatest Local casino Internet sites for people Members Specific operators offer no-put incentives, enabling risk-free exploration of the systems. Old-fashioned dining table games look after solid popularity certainly Finnish users exactly who take pleasure in strategic game play. If you would like to understand more about far more online game, templates, and you will app business outside of the casinos in the list above, see all of our webpage toward most useful position internet sites to have intricate evaluations and most recent bonus also offers. The latest games try put-out weekly, with headings such as Huge Bass Splash, Bonanza, and you can Publication out-of Dry constantly positions being among the most common options. Of many programs have regional favourites such as Tali (Finnish Stud Poker) or any other poker variations well-known regarding the Nordic area. To own optimal gambling, get a hold of casinos one help EUR currency and provide customer care within the Finnish. Better Harbors Sites during the 2026 Real Zero Verification Gambling enterprises: No ID Withdrawals Confirmed July 2026 Top A real income Online casinos to possess July Safer & Safe Online casinos Find Respected Sites and you may Mobile Casinos Fastest Payment Online casinos 2026 Immediate Withdrawals Best Prompt Payout Casinos That have Immediate Withdrawals July 2026 Most readily useful Casinos on the internet Europe July 2026: Best Eu Gambling establishment Websites Looked at Licensed Eu Gambling enterprises Ideal European union Casinos An informed Online Western european Gambling enterprises for the 2026 Would you Earn in the Harbors? Exactly what Really works? Most useful Casinos on the internet inside the European countries for real Currency Gambling 2025 Tiger 7s Slot 100 percent free Demonstration Play Top ten High Ranked Gambling enterprises Greatest Casinos on the internet from inside the Czech Republic Greatest CZ Internet 2026 On-line casino Cyprus 2026 Best 5 Best Web based casinos Cyprus Vegas Rooms & Resort Most useful Internet to possess 2026 Greatest Real money Gambling enterprises 2026 Betcris: Надёжная платформа для ставок и азартных игр Top Casinos on the internet Canada >> Finest Real cash Casinos 2026 Most readily useful web based casinos Canada 2024 Top ten real money Canadian gambling enterprise websites Looked at & Reviewed Greatest Online slots games inside the Canada Highest RTP Slots Better Online slots Canada Best Casinos on the internet Ontario 2026 Compare 70+ Web sites Greatest Casinos on the internet inside the Canada Greatest 20+ Gambling establishment Web sites 2026 Top A real income Web based casinos Top ten When you look at the July 2026 Ideal Casinos on the internet when you look at the Canada: The best place to Gamble Lawfully when you look at the 2026 Finest online casinos when you look at the Canada to have 2026 National