/** * 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 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 Erreichbar Spielbank qua Payforit aloha cluster pays Slot -Spiele 2026: Nutzbarkeit within Land der dichter und denker Neue Online Casinos über Abreise inoffizieller mitarbeiter Casino party Mobile August 2026: Tagesordnungspunkt Boni & Slots Najbolji vulkan vegas Hrvatska bonus poticaji i kuponi za online kasino 2026. Best On the internet Bingo Web sites 2026 Play Funky Fruits 120 free spins Real money Bingo Game Lastschrift Erreichbar Kasino Alpenrepublik ᐈ Tagesordnungspunkt Echtgeld Casinos via Sizzling Hot freispiele trick Sepa Lastschrift Retournieren & ELV Einzahlung 2026 Lastschrift Verbunden Kasino Ostmark ᐈ Fairy Land 2 Casino Top Echtgeld Casinos via Sepa Lastschrift Retournieren & ELV Einzahlung 2026 Verbunden Casinos via SEPA Lastschrift 2026 Lucky Charmer Slot -Jackpot Syllabus No deposit Incentive South Africa: Fantasini Master of Mystery slot 16 Real time Also offers Opposed 2026 Deutsche ELV casinos4u Wett-App Casinos Lebendigkeit 50plus Partnersuche und Partnerbörse ist hitnspin seriös nicht eher als 50 Verbunden Spielbank auf Handyrechnung the sopranos Slot Free Spins saldieren 2026 Better 100 percent free Slots having Bonus No Down load SpyBet casino promo code 2025 Required Spielbank über Handyrechnung Gemix Slot Casino -Sites begleichen 2026 Erfahrungen