/** * 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 Turinabol le complément indispensable pour les athlètes Pusulabet Giriş Resmi Güvenli ve Hızlı Bahis Deneyimi Online pokies Australia zero obtain Play finest totally galapagos islands online slot free pokies Larger Purple-colored Position: Gamble free Pokie Machine Online game by Aristocrat: free spins on 4 symbols No Download Stéroïdes à Faible Dose pour l’Optimisation des Performances Sportives Nye Danske Casinoer En Dybere Forklaring på Det Nye Spillelandskab Ninja Magic Position Winnings To 40 BonusSpins + 8xMultiplier Φρουζί Καζίνο Η Απόλυτη Εμπειρία Παιχνιδιού In the Extra, we believe that openness is the first step toward a safe gambling sense On the bright side, you need a good sbling way to win to try out 5-reel harbors Although not, Yayz also provides highest incentives, quick redemptions, and you will a refined program, therefore it is an emerging site Go the new positions to have large advantages, quicker redemptions, and you will personal rewards They want to remain accessible to group, free and are for this reason completely accessible any kind of time point BetUS allows Ethereum, delivering people with quick profits and you will timely dumps having a softer gaming experience Scott Roeben appeared every United states casino details on these pages Perhaps not designed for brief monitors or go-within the gains � it likes flow, return visits, depth Present notes are easily canned after which sent thru email address BC.Game Registration Ultimate Guide to Registering and Winning Big Exploring the Mythical World of the Gods of Plinko Slot Game The Ultimate Guide to Yeti Win Unlocking the Secrets of Success Casino Uden ROFUS Bonusser Uden Grænser 1270409989 Les Avantages de la Métabolomique pour les Athlètes To the UK’s alive gaming world, there’s something for every single punter Making your way around different kinds like Video Ports, Quick Video game, and Real time Agent choices is simple While you are belongings-depending betting (casinos, lotto, pony racing) are courtroom, online gambling is not regulated The fresh new sleek and progressive framework brings an enthusiastic immersive ecosystem to own professionals, enhancing its overall playing experience Strombafort Un Partenaire de Confiance pour les Athlètes Effets et Utilisation de Methenolone Oraux dans le Sport L’impact des antifongiques sur la performance sportive Zahraniční casina Objevte svět online hazardních her Gamebookers Gambling establishment Review: Offers, Incentives & Promos Play 21,750+ Free online Casino games No Download Local casino Added bonus Rules 2026 Affirmed Coupons & Discount coupons 30 100 percent free Spins No-deposit Bonuses For all of us Professionals Inside the 2025 Enjoy 21,750+ Free online Gambling games Zero Obtain Totally free Harbors, Black-jack & Chips Free Slots, Black-jack & Potato chips 29 Totally free Revolves No deposit Incentives For all of us Professionals Within the 2025 Gambling establishment Put 9 Pound: The cold Maths At the rear of You to Package Doubledown Casino Free Potato chips DDC Coupons Up-to-date Each day Better Casinos on the internet the real deal Money 2026 Finest No-deposit Incentives 2026 Best You Casinos on the internet Play 100 percent free Slots Games On the web Respected Local casino Betting Guide to have 31+ Ages Steroidi e il loro effetto sulla composizione corporea: metodi per ottimizzare la perdita di grasso e l’aumento muscolare DoubleDown Casino Free Chips Every day Added bonus Collecter Summer 2026 DoubleDown Local casino Free Potato chips Everyday Incentive Collecter June 2026 Password promo DoubleDown Gambling establishment 2026 vérifié ou offre actuelle Password promo DoubleDown Gambling enterprise 2026 vérifié ou offre actuelle Perché il Clenbuterolo non “brucia” i grassi – spiegazione