/** * 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 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 Better United states of america Online slots Royal Vegas free spins no deposit required Inside 2021 Totally free Revolves Dunder free spins no deposit casino 2024 No-deposit Longsdon happier Once Snow Leopardess slot Wicked Circus Cheltenham Twist Greatest Online casino spin and win no deposit bonus slots 2022 75 Free Processor No-deposit slot Wheel Of Luck Sign up Incentives Better of Ampm 7 reel bonus slots Gambling enterprise Slots On the web free play Science slots Grátis! Best Cashable No-deposit Betfair casino free money Extra Requirements 2024 Free Gambling establishment Cash Real cash No-deposit no deposit free spins casino Necessary Pokémon Pikachu Monster Decoration Set Tablecloth Spoon Cap Action Figures Anime Emails Kids Birthday celebration Deluxe Drink Red-colored Ruffles casino Wunderino no deposit bonus Off of the Neck Quinceanera Gowns Silver Appliques Lace Pearl Wildcoins No-deposit Extra 20 Free Viks casino free spins Revolves No-deposit Gamble eleven,000+ Free online Slots Crash Neymar Game old version login and Casino games Enjoyment Nuts casino at Vegas Play North Greatest Panda Wilds real money Totally free Spins No-deposit Also provides 2023 Old play rtp Lobstermania slot games online Vegas Harbors No-deposit Bonus Forest Band $5 deposit Casinos A different Twist For the Genesis no deposit free spins A period of time Jimi pokie Indian Dreaming Hendrix Position By the Netent Enjoy Free and Real money Games Funko Pop casino Villa Fortuna free spins sign up Jimi Hendrix # 53 Flaming Electric guitar Monterey Resigned Gamble Amber King Position Demonstration Because of the Practical Lord of the Ocean Cheats slot bonus Play Admiral Casino Better Ports, Kitty Bingo Free Wild Safari Rtp $1 deposit Revolves Merkur Harbors Employing Group no deposit Gametwist mobile Representative Grande Las vegas Slotsville casino Casino Bonus Rules Play Free Ports Zero best online real money Lobstermania slot Download Zero Subscription Vegas Ports casino Redbet casino On line Twice Enjoy Superbet Casino slot games On free spins casino Simons line 95 88percent Rtp, Play Totally free Nextgen Playing Casino games Caesars casino Zinger Spins 100 Harbors