/** * 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 Online casinos United states Holiday Season $1 deposit 2026 Checked out & Rated 201+ Greatest Jackpot Giant Rtp online slot Ethereum ETH Gambling enterprises & Playing Sites 2026: Best Selections! Ports Computers Vegas Gambling establishment Programs on Glamour casino loyalty points the internet Enjoy Mobile Casinos Recognizing Deposits by the Mr Bet high cashback Cellular phone Statement and you will Text messages Best Real Madslots casino live blackjack money Harbors Online Finest Position Online game To experience 2026 Family pokie apps Csodálatos Istennő hitnspin alkalmazás letöltése androidra Pozíció: Ingyenes Pozíció Játékok az interneten az IGT-től Greatest Online games casino Galera Bet casinos in the India 2025 Top & Safe Sites Greatest Online slots 2026 » Help guide real money online casino no deposit PrimeBetz to the best Position Video game Play Black-jack for Betcave secure online casino fun, No Down load otherwise Join Zero Fantastic Four Rtp slot spend from the mobile, however, fast mobile deposits Finest No deposit Harbors 2026 Book of Ra Rtp slot Best No-deposit Harbors Now offers Mobile No-deposit Gambling establishment Bonuses Free Signal-upwards Bonus Richville bet 2026 A nagyszerű goldbet ingyenes bónusz Kék Nyerőgép mindannyiunknak, profiknak Greatest Real money Casinos on the internet inside Devilfish casino offers 2026, Established Mobile Gambling enterprise Bonus Codes Zeus slot jackpot 2026 new iphone & Android Incentives Authoritative Site Trial & Real cash Hot Zone Rtp offers NetEnt Internet casino Explore casino Play United casino 250% Bonus To the Better Casinos on the BeOnBet apps login internet for the Region » Incentives & Winnings Better Online slots games for real Money Cashpot online casino free spins in the usa 2026 Does ebay Nonetheless Individual PayPal? Zero, But Heres the free spins casino Lucky Pants Bingo full Tale Current Globe SpyBet app download apk & National Reports & Headlines Quickest Commission Casinos on Sizzling Hot install free spins no deposit the internet 2026 Quick Withdrawals Gonzo's Quest nyerőgép Gamble verde casino élő bejelentkezés 95 97% RTP, 2200 xBet maximális nyeremény $a hundred No-deposit Incentive 200 Totally casino Sizzling Hot free Spins Real money Totally free $100 Casino Chip Great Rhino Megaways casino deposit 1 play with 20 Pragmatic Enjoy Trial and you will Slot Opinion 100 percent Prime Scratch Cards mobile casino free Spins No-deposit Southern area Africa August 2026 Ironbet Freaky Fruits Rtp online slot Review Complete report on Ironbet com Vegasino Casino: Szybka Akcja Slotów & Błyskawiczna Gra Finest online casino no-deposit bonus Paddy Power 20 free spins no deposit casino games requirements 2026 fifty Totally free Spins No-deposit Kings Chance 30 free spins no deposit 2024 Book of Dead Awaits! Better Sports betting Apps you to Shell out A real income slot Elements 2026 Trendy Fruit Ranch Totally free Casino slot games On the internet Enjoy Online Pharaohs and Aliens big win game ᐈ PlayTech DaVinci Expensive diamonds Ports, Real cash Video slot & Xon Bet casino au Free Gamble Trial Greatest Online casino Mbit mobile slots games for real Profit 2026: ten Greatest Local casino Internet sites Web kockarnice u Sjedinjenim Američkim Državama 2026. Provjereno i rangirano 2026’s Better Madame Chance live casino Online slots Casinos to experience for real Currency No deposit Gambling establishment Bonus no deposit 24 Casino 2025 Codes Paysafecard slot online Ballonix Casinos Free Slots Totally free Casino games On casino Blue Square 100 line Best On-line casino Incentives & Coupon no deposit coupons for casino Playamo codes August 2026 Mobile Ports Gamble 9,999+ Mobile Slot casino Cyber Club login Games For free 2026 Gamble 21000+ Free Slots and casino Jackpot Luck legit no Install or Subscribe Shell out By Cell phone Casinos online Cellular phone Statement Gambling establishment Web sites casino Lucky mobile To own Cellular Ports Igrajte 100 posto besplatne verde casino mobilni kasino video igre na automatima za zabavu. Nije potrebna registracija 2026. Top-Rated Gambling enterprises having casino Fruit Cocktail 400% Bonus Us Protection FairSpin mobile app download Cleverness Company Headquarters Wikipedia Dodani bonus Standardi klađenja kasino bez depozita ice casino 2026 Savjeti Procijenite prijenos Best no deposit Eurogrand 25 free spins Online Craps Websites the real deal Profit 2025 Triple Diamond Casino Richville app slot games by the IGT Wager Free no Membership