/** * 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 Top Slot machines During the Graton Local casino several one hundred thousand+ kostenlose Online slots & Spielautomaten Totally free Главная Best Gambling enterprise Programs in america 2026 Real money Internet sites & Way more Huge Casino: Slots & Bingo Programs on google Gamble Gorilla Go Insane Slot Remark Totally free Ports On the web Play 20,000+ Trial Slot Online game Slots: Whenever Is the better Time to tackle? Casino games Collection Superior Personal Gambling Sense Golden Goddess Slot machine game ᗎ Enjoy Free Demonstration & Complete Opinion Play 100 percent free Silver-styled Slots Gold Seafood Slot machine Software online Gamble Very Well Online Casino UK Your Ultimate Guide to Online Gambling Doors away from Heaven Demonstration Play Slot Game one hundred% Free Garden Channel Local casino, Mossel Bay, Southern area Africa Product reviews, Feedback, Tips and exactly why You will want to Wade Top-Spiele im Online Casino Echtgeld: Entdecken Sie die besten Slots und Tischspiele Understanding casino odds A guide to maximizing your payouts Totally free Vegas Harbors Games On the web ️ August 2026 Harbors Victory Casino No deposit Bonus Requirements 2 hundred 100 percent free Spins BetWhale Gambling establishment Review: Unrivaled Online game & twenty-four 7 Support Gambling establishment Royale Position 100 percent free Video slot from the Aristocrat Respected A real income Internet casino $one thousand Allowed Added bonus Crypto Gambling establishment & Sportsbook 590% Bonus & 225 100 percent free Spins Play 19,610+ Free online Slots No Down load otherwise Registration! The brand new Prominent VLT Games Guide for Macedonia Personal $twenty five Totally free No-deposit Incentive No deposit Requirements Available for All of us People 2026 The new Cool Aura try Felt Every where in the SlotVibe Gambling establishment How Gambling establishment Withdrawals Performs: Just what Actually Determines Their Payout Speed? Web based casinos United states 2026 Examined & Ranked Explore secure payment options at the best online casino Canada in 2026 Kyngs Casino spellen: ontdek de nieuwste en meest populaire slotgames Getting started at Ripper Casino: essential tips for first-time Australian players No Download 2026 Totally free Harbors Gamble 8541 Free online Video slot Hosts Fast Withdrawal Casino UK 2026: What to know about real money games and rapid Online Ports Enjoy Thousands of Free Position Games from the Spree Mastercard and Online Gambling Establishments: The Perfect Combination How to Find the most reliable online Slots, Blackjack, Amusement Slots and Online Casino Games Best Online Casino Canada 2026: Explore safe banking and quick payout options Un error frecuente es registrarse referente a plataformas en donde los retiradas se podri�an mover desvian a otros estrategias Ciertos casinos aceptan tarjetas de endeudamiento, no obstante no garantizan beneficios fiables Este tipo de opcion se encuentre presente acerca de muchos zonas asi� como tiene una enorme numero de seres Participar en cualquier casino desprovisto facultad suele implicar multiples peligros Preparate de conocer un mundo sobre juego online adonde tu eres nuestro protagonista Disfruta de tragamonedas en internet con manga larga dinero cierto en el momento en que familia, con el pasar del tiempo premios, emocion y empuje Una parte a otra adonde se puede relajarte desplazandolo hacia el pelo gozar sobre las juegos sobre casino favoritos fiable Tiene las mas grandes juegos sobre casino gratis acerca de Ciertas zonas de espana, sin efectuarse que almacenar dinero favorable Best Real time Casinos 2025 Where you should Enjoy Alive Agent Online game On line