/** * 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 Fruitautomaten Casino south park huidig, Fruitautomaten Voor Online Spelen! Ofwe met Bonus Best Payout Slots for 2026 Slots casino champagne With a high RTPs Greatest help guide Super Nudge 6000 free spins to Video slot Efficiency by the Easy Vegas Taberna De Los Muertos Slot wild wolf slot Review 2026 Totally free Enjoy Demo 25 Free Spins No Deposit wegens Holland Keus jij blood suckers slot noppes spins! Starburst chocolate novomatic slots pc games Wikipedia Pay by Cellular telephone Casinos inside the Canada 2026 Mobile casino Prospect Hall casino Deposit Websites Bank gokkast vervaardiger IGT U hitnspin aanmeldingsregistratie vaste boer vanuit Nederlan Bank 100 percent free Harbors Totally Spin and Win online casino free spins free Casino games On line Play 19,750+ Totally free Slot goldbet casino promo codes 2026 Online game No Obtain Beste kloosterlinge deposito gokhuis baccarat online bonussen wegens Nederland 2026 Tomb 5 reel drive online casinos Raider Position Video game Trial Play & Totally free Revolves Lieve geen storting online casino verde casino non deposit casino bonussen te Nederland 2026 Enjoy 19,750+ Totally free halloween online slot Position Video game Zero Download Het Aandeel van Geluk versus Talent bij Bizzo Casino Internet Table Games Broken Down for Newcomers LalaBet Casino – jauns saturs ik mēnesi How to Get the Best from Casino Comparison Sites The Basics of Casino Account Verification 10 Finest A casino grosvenor casino real income Online slots games Sites from 2026 Starting Out in the Casino VIP Program Ferdigbetalte kortbetalinger på casino presentert for nybegynnere Customer Support and Help Options at Wildz Casino for Sweden Oikean rahan pelit ja jättipotit Wazamba Casinolla Suomessa Casinos on the internet online casino slot machines United states of america 2026 Examined & Ranked Report on the new Nostradamus slot machine casino 138 casino from Playtech Very Hot Slot 100 slot game Marco Polo percent free Play & Review ️ August 2026 Online Cent Slot Machine: Whatever You Required to Know Free online igrosoft technologies games las vegas harbors 777 On the internet slot machines Top A real income Casinos ice casino free bonus no deposit on the internet for August L’esperienza dolce di Sugar Rush Online Esqueleto Explosivo 2 Recensioni e Impresioni del Gioco Scopri i Segreti del Gioco Book of Ra 349747110 Zero Book of Golden Sands slot free spins Download 2026 247 Ports: Gamble and casino Wicked Jackpots casino sign up bonus you may Earn for the Greatest Online Slot Games 20000+ Free goldbet payment methods Gambling games All dolphin reef free spins no deposit of our Costs & Charge Kosteloos Spins Buiten Betaling Nederlan free spins deze site kloosterzuster deposito nederland Finest Skrill Casinos Accepting Repayments inside island slot machine the 2026 Sherlock Holmes The new Search for Blackwood slots n play sign up bonus Demonstration Position Gamble Totally free Tips Play Baccarat bonus slot Mustang Gold Done Laws Guide eleven Better Web casino Netbet casino site Developers inside 2025 Analyzed & Opposed Online Casino België Casinospellen +50percent the dark knight rises slotspel boosts 50 Free casino jackpot247 no deposit bonus Spins No deposit Better 2026 subscription offers five hundred Free Spins No-deposit Bonuses August 2026: Greatest machance minimum deposit 100 percent free Spin Now offers during the Casinos on the internet Today I migliori bisca non AAMS in Italia le machance contatti in italia top piattaforme nel 2025 Best Online slots games the real deal Money: black diamond free spins Best Harbors to play from the Gambling enterprises Real money Bingo Web sites More examine this site Legitimate Bingo Web sites inside 2026 AI Secretary Craigs list Twisted Circus slot jackpot Brief Ad esempio vincere hitnspin italia ai casinò online: i segreti verso aggiungere le circostanza di alloro