/** * 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 Steroidi e il loro ruolo nel migliorare il recupero muscolare: strategie e benefici No deposit Incentive Rules casino presto Personal Totally free Also provides in the 2026 Greatest Guide to Totally free Spins habanero joker poker 100 hand online real money 2025: Ideas on how to Claim & Optimize Incentives Starburst Teutonia Der kosmischer Online Slot bei Slot football legends NetEnt 300% Spielbank Provision unter die erste Sizzling Hot bonus Einzahlung inside Deutschland Freispiele abzüglich Einzahlung Hot Scatter Spielautomat 2026 Casino Freispiele Innovativ Guía Completa para Comprar Anabolizantes Esteroides para Hombres: Lo Que Debes Saber Is erforderlichkeit selbst beim Game of chance auffuhren in der Spielsaal bemerken? Finest Online slots & Local casino Bonuses Most readily useful Slots & Bonuses Betway Sign-up Bring Uk Free Spins & Codes 2026 White & Ask yourself Ports Enjoy 100 percent free Demonstrations Betfred Local casino Opinion and you can Added bonus Bring 2026 MOFCOM Spokespersons Remarks to your Adding Three You S. Companies toward Unreliable Organization Listing Online-Slot Vergleich: Pass away a hundred+ besten Spielautomaten Best Films Slots Online 2026 Top Video slot Gambling enterprises Play Online slots games in the 32Red The best Online slots regarding the British Most useful Slots Aunt Internet sites Path Neighborhood Church Finest Online casinos the real deal Currency 2026 Play the best British on the internet slot game from the Amazon Slots Bedste Online Casino Uden ROFUS – Find Dit Favorit Casino Goldrush On-line casino Southern area Africa A real income Slots Home Slot Game Reviews Breaking Down the Best Titles 1550137081 Beginner's Guide to Understanding the World of Gambling 15 Lessons About casino ardente recensioni You Need To Learn To Succeed Yet Im ach skeptical about this one spielcasino Inoffizieller mitarbeiter Gold Prominenter Beschmu hinter versiert ist und bleibt recht unwahrscheinlich Freispiele scheinen unter Verifizierung oder seien 23 Periode perfekt Winnerz Spielcasino qua 55 Freispielen z. hd. Guide concerning Dead ermoglicht den hochsten Spielwert Mastering financial management in the gambling world strategies for success Technologie und ihr Einfluss auf das moderne Kasinoerlebnis Follow this one streamlined path when codes go reside, and you will definitely never shortage a gifts: Diese Vor- unter anderem Mankos wa 4� Spielbank Pramie exklusive Einzahlung Welches man sagt, sie seien selbige Pluspunkte bei 20 Euroletten Bonus ohne Einzahlung ? Beginner's guide to understanding casino games and winning strategies Újabb Szenzációval Érkezik a Chicken Road 2 Online Játék Magyarhonba. The Exciting World of Trino Casino & Sportsbook Combinación de Esteroides con Otros Suplementos: Consideraciones Importantes Dépassez les limites du jeu de poulet casino en France Cenforce Kurs: Effektive Lösungen für Erektionsstörungen Explore the Excitement of Ricardo’s Casino Découvrez le Jeu de Poulet Argent 2, un Excitement Sans Fin en Ligne Exploring Slots Muse Casino & Sportsbook A Gamer’s Paradise Winning strategies for gambling success in competitive environments BettingHub Your Ultimate Guide to Smart Betting 337757191 Betting Sider med Gratis Bonus – Gør Dine Spil Mere Spændende Kosteloos Spins Zonder Storting Candy Bars slot Holland 2026 » 1000+ Fre Spins Land over liefste offlin casino’s betreffende het Vegas Hot 81 slot Noppes spins-premie afwisselend 2026