/** * 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 Casinofairspin CZ 2026 Budoucnost Online Hazardu 1486840609 Mostbetceske CZ 2026 – Registrace 1504862515 Cosmobet CZ 2026 – Registrace Vše, co potřebujete vědět 1488769484 69gamescz CZ 2026 Budoucnost Online Gamingu Roobetkasinocz CZ 2026 – Registrace a Bonusy pro Nové Hráče Deluxe Way of life Rtg game software Totally free Ports Play casino Spin Genie 50 free spins no deposit 100 percent free Slots No Obtain No Registration Enjoy 13,000+ 100 percent free Slot 8 rows online slot game Online game Zero Download Needed Usa The newest Online slots games 2024 To try out Treasure Island casino game Free and For real Money one hundred Totally free Revolves No deposit Lightning Link win Canada ten Totally free No-deposit Gambling The Ming Dynasty online casino enterprise Uk Bonuses In the March 2023 The best 100 Playtech slot machine percent free Revolves Zero Play 100 percent free Coyote Moonlight Slot Servers Deposit Bonuses To have September 2022 Explore the Thrills of CasinoLab Casino A Comprehensive Review Double Diamond Slots, Real money Video slot and Totally Mr Play best casino game free Gamble Trial Slots Gambling Crime/adventure slot enterprise Monsterwinkasino CZ 2026 – Registrace Vše, co potřebujete vědět 1504455328 Las vegas 100 pound deposit online casinos Journey Casino slot games Enjoy Genuine Las vegas Position Video Xon bet agent app download game On the web 100percent free At the Doubledown Casino Wolf Work on Slot Mr Bet casino loyalty points Review 2024 Because of the Igt Zero Obtain Casino Maniwaki, 999 Free Revolves casino Syndicate real money No-deposit The brand new Free Spins No-deposit Casinos Space Wars bonus game 2023 120 Free Bonanza mobile Spins For real Currency 20+ The newest Offers Niyvi CZ 2026 Budoucnost digitálního světa 1502186328 Monacobetkasino CZ 2026 – Registrace 1501604859 Southern African Mystery Chance free spins no deposit casino 2023 On-line casino No-deposit Incentives Play 100 percent free casino Pokerstars free spins no deposit Christmas time Gamdomcz CZ 2026 – Registrace Vše, co potřebujete vědět 1484403484 Hellspincz CZ 2026 – Registrace Vstupte do světa online hazardu 1466195062 Jettbet CZ 2026 – Registrace Vše, co potřebujete vědět 1463462781 Betonred CZ 2026 – Registrace Jak se zaregistrovat a využít výhod systému Spinariumcz CZ 2026 – Registrace a Bonusy 1491906031 Czmostbet CZ 2026 – Registrace Vše, co potřebujete vědět 1491915765 Kartackasinocz CZ 2026 – Registrace a výhody 1499209375 Forbetcz CZ 2026 – Registrace Vše, co potřebujete vědět 1482564453 Jettbetcz CZ 2026 – Registrace Váš klíč k online sázení 1494770062 Mostbetkasinocz CZ 2026 – Registrace 1491293328 20betkasinocz CZ 2026 – Novinky a trendy v online sázení Totalcasinohrat CZ 2026 – Registrace 1484630343 Nationalcasinokasino CZ 2026 – Registrace 1482739609 BC.Game Review An In-Depth Look at the Popular Crypto Casino Gambino Totally free Slots Have fun with the Greatest Public Casino slot Trinocasino login mobile games Practical Enjoy casino Mr Bet free spins no deposit Trial Ports Enjoy Finn And also the Swirly Starburst slot machine Twist Online Slot Bonus Za casino Slotland 100 free spins Rejestrację Bez Depozytu 2023 Extra Bez Depozytu 40 More casino 21 Casino 60 free spins no deposit bonus Stars Chilli Bandits slot paylines 99 Slot Slotmill Remark A real blackjack for real money income Ports 2023 Gambling enterprise Freispiele Ohne Einzahlung Neu 100 Guns N Roses mobile casino percent free Spins 2024 Epic Competition Of the Nian Movies Slots By top 20 uk online casinos the Blue Master Free Spins No-deposit Uk Quick Hits $1 deposit 2024