/** * 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 kasína na Slovensku – Bezpečné hranie a bonusy 500 Casino DK 2026 – Fremtiden for Online Spil 21898015 Online Kasína Ako si vybrať najlepšie zahraničné možnosti Online Kasína na Slovensku – Všetko, čo Potrebujete Vedieť Online kasína na Slovensku – Príručka pre hráčov Online kasína 2026 Transformácia a budúcnosť hazardných hier Online kasína na Slovensku – Všetko, čo potrebujete vedieť 15652718 Online kasína na Slovensku – Všetko, čo potrebujete vedieť Online kasína 2026 Nové trendy a technológie vo svete hazardu Online kasína na Slovensku – Prehľad a tipy Online kasína 2026 Nové trendy a technológie vo svete hazardu Online kasína na Slovensku Ako si vybrať to najlepšie Online Kasína Bez Bankového Účtu Hrajte Bez Starostí Online Kasína bez Bankového Účtu – Hrajte Bez Starostí Online kasína na Slovensku Kde a ako si zahrať Online kasína na Slovensku – Hrajte s dôverou a zábavou Online kasína na Slovensku Bezpečnosť, bonusy a hra Online kasína bez bankového účtu Hrajte pohodlne a bezpečne Online Kasína 2026 Budúcnosť Hrania a Trendy Online Kasína na Slovensku – Zábava a Výhody Hrania Online Kasína 2026 Trendy a Inovácie v Svete Hrania 500 Casino DK 2026 – Fremtiden for Online Spil 23831984 Online Kasína Bez Bankového Účtu Všetko, Čo Potrebujete Vedieť Online Kasína 2026 Nové Trendy a Vývoj v Hernom Svete Yummy Wins A Guide to Sweet Success in Online Casinos Драгон Мани: Мифический Зверь или Реальный Выигрыш? Steroidi Anabolizzanti nello Sport Professionistico: Realtà o Mito? Freespins uten innskudd 2024 Avsløre Casino rizk Ingen innskuddsbonus hele listen inni November 2024 Casino arv Casino folkeautomaten anmeldelser uten almisse Bred bonuser i Norge 2026 Immortal Romance Slot Review & Slot Games second strike Features Hot Scatter Chance and Reward Variance etterspurt Slot casumo Casino Machines Yangi boshlanuvchilar uchun qimor o'yinlariga kirish asosiy qoidalar va tavsiyalar Navigating payments with ease in the world of interac casinos Test Post Created Panther Moon slot graj w trybie demo nv casino za darmo Discover the Excitement of WynsCasino Your Ultimate Gaming Destination -1392000980 Bezpłatne spiny nv casino bez depozytu na terytorium polski Maj 2026 Online Casino Triumph Your Gateway to Winning Big We Saw This new Killers Enjoy An arena-Rock Reveal In the A theatre And it Are nv casino Awesome Just how to spend every night on Spirit Hill Gambling establishment in place nv casino of playing What are the results easily remove access nv casino to my membership? Fill out your nv casino own advice, and create a password Everything You Need to Know About 2222bet The Ultimate Betting Experience Защита поставщика в госзакупках Права и возможности 179295270 Understanding casino etiquette Tips for a respectful night out Exploring Non-UK Casinos A Guide for UK Gamblers Overseas Casinos Accepting UK Players A Comprehensive Guide -1239058906 No ID Casino The Future of Online Gambling -1235515125 Exploring the Thriving World of Online Gambling in Canada -247839573 Exploring Non-UK Casino Sites A Guide to Online Gambling Options