/** * 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 Pin-Up: лучшие мобильные приложения для азартных игр на ходу Gates of Olympus Un Viaggio Divino nel Mondo delle Slot Pin-Up casino-da pul çıxarmaq: sürətli və etibarlı yollar Navigating Grosvenor Bet feels like stepping into a familiar yet surprisingly sleek corner of the betting world Test Post Created Bedste i24Slot login Danmark tilslutte casinoer foran danskere i 2025 Scopri il Mondo di Plinko Gioca a Plinko e Vinci! Tilslutte Spilleban, 70+ Bedste Danske Ybets login Danmark Tilslutte Casinoer 2026 kasino dk, Danmarks Blive 6 Bedste På Trinocasino registreringsbonus Casinoer Ma Bedste På Immerion casino bonus kampagnekode Spillemaskiner Med Rigtige Middel inden for Danmark 2026 Top Mastercard Gambling Establishments: A Comprehensive Guide Bedste online casinoer indtil hasardspil i kraft af rigtige penge Gambling Mere hjælp guider Free Ybets bonusudbetaling Spins d.d. 2026 Fr Spins bland Danske Casinoer Mermaids Pearls Lystslot Barndomsby Realeksamen Lektion Gaming, Review, Demobån i24Slot app download seneste version Game Bedste spilleban Immerion casino Danmark app download bonusser i juli 2026 indtil godkendte danske casinoer Gratis Xon bet bonusser casino afkast: 2 800 free spins plu 9.000 kr. juli 2026 Kokemukseni kun käytin Nettikasino Siirto palvelua ensikertalaisena pelaajana Diggy’s Wiki deres hjemmeside Maps,Videomaskine,Walkthrough Betway Trinocasino app download til Android Online Kasino Review 2025: Isdække Betway Casino Legit? Scopri il Magico Mondo delle Slot Re Mida 2087022812 Descubre el Bono de Big Bass Bonanza Una Aventura de Pesca y Premios Blackjack Online Free for Enjoyable: An Overview to Appreciating the Standard Card Game Pin Up Casino: секреты выбора лучших настольных игр и слотов J ai teste les retraits de Wildies Casino et voici les delais reels Wildies Casino biztonsagi es szabalyozasi valtozasai 2026 evben The site has typical campaigns, as well as multiple a way to incorporate Wins for you personally at the zero pricing Zodiac Casino has the benefit of a robust mobile feel, with many content available on modern cellphones and you can pills Gambling establishment apparently made an effort to create a dash for it, but is actually caught soon afterwards Select SSL qualification to ensure the system operates legitimately on the web Here is the Top Sweepstakes Local casino Discount Password Right now Do not Skip It Il Meglio Online Casino Online: Una Guida Esaustiva per Scegliere la Sistema Perfetta If you value private dining tables, particular British names provides distinguished set-ups Dominance Local casino British enjoys a really high Security Directory of nine Should your objective should be to withdraw money immediately instead of to experience, that is not reasonable from the controlled casinos All the appropriate legislation and you will restrictions uncovered from the all of our reviewers was noted alongside for each and every offer a lot more than Decide for the, put & wager ?10 to your chosen slots within this 7 days out of registering 888starz Befizetés és Kifizetés – Minden, Amit Tudni Érdemes SuperSlots helps prominent fee choice plus significant cards and cryptocurrencies, and you can prioritizes prompt earnings and you will mobile-ready gameplay Betus Gambling enterprise will bring a variety of safe and effective withdrawal actions from inside the 2026, providing prierican user legs The benefit bring of was already launched during the an extra screen Discover the Thrills of Tenobet Casino & Sportsbook -1822250839 Betting winnings are believed taxable money in america, along with getting users when you look at the New york SpinBlitz Promo Code and you may Added bonus Even offers: Get ten Totally free South carolina + 30 Payment South carolina Revolves Come prelevare le vincite su Cazimbo Italia 2026: metodi rapidi e sicuri Trusted Online casinos 2025: Ideal Web based casinos You to Spend Real money Of numerous networks keeps stretched its fee choices to are brand new coins such as for example Dogecoin, Tether, and you may Bitcoin Dollars This method escalates the likelihood of changing bonus funds towards withdrawable dollars The top casino slots of 2026: a deep dive into popular games and themes WinThere – Your Ultimate Online Casino Experience