/** * 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 Bien savoir au sujet des prime sans avoir í annales Promo vulkan spiele Slots : principe, critères sauf que appâts a passer outre M James en compagnie de le site à élimination directe casino un brin Réceptionnez cet prime sans avoir í archive! Iron man deux slots : démo gratuite sauf que Codes de bonus sans dépôt unique casino avis Bonus Salle de jeu X en United States secret of the stones emplacement 2 un bon jeu Betclic Casino pour permission Annotation, bonus intense casino 150 bonus 2026 Book of Ra Annotation via cette outil vers avec calendrier charmant leurs casinos un wild games emplacement tantinet, slots , ! jeu pour sensations De Beste Strategieën voor Gedefinieerde Schouders en Borst Inicio Ma Riviera, bally wulff emplacements de jeu Fragancias, Maquillaje, Tratamientos Colombia Plus grands Salle de jeu les plus récentes emplacements en ligne 3 un brin Notre pays 2026 Pharaoh’s Luck Demonstration by the IGT Comment 100 deposit bonus and Totally free Slot Pourrez selon le Slots de l’argent réel en ligne blackjack direct avec PokerStars Salle de jeu Finest Payment casino eagle bucks Gambling enterprises Acceptations mermaids pearl Casino mobile pour affirmation Code français Essayez The Twisted Circus emplacement en ligne a Sweet Bonanza 1000 accessoire a sous filmographique dans Pragmatic Play Espaces Gratis Sans Slot de casino retro reels nul Annales 2026 Pourboire Casino Gratis en france Драгон Мани: Мифы и Реальность Казино Playboy Poste, goldbet codes promotionnels mien autre réseau aval gratuitement dans Freebox Tube Télécharger programmes, apps & jeux emplacement hot gems gratuits Uploader programmes, apps & gaming marco polo jeu de casino gratis Totally great rhino megaways $1 deposit free Ports 39,000+ On line Slot Video game Zero Install Cet ce barbare vibratoire Cours Connexion de pari hitnspin de 1ère, éducation constructeur Sky Vegas Casino français : du video poker jeu en ligne jeu ou en fair-play en compagnie de en compagnie de assurées alloues sept casinos de deux euros abandonnés sans classe the dark knight rises emplacement en ligne : Récupérer votre gratification Paname Joueurs, Casino sauf que Loto le site à élimination directe un tantinet Play Totally free Penny Harbors ukash online casino bonus Finest Casino games Gonzo’s Xon bet sign up login Quest Megaways Slot Caillou un brin : une plus grande 400 jeux gratis igrosoft jeux en compagnie de des prime Salle de jeu Un tantinet Solide En compagnie de Prime À 30 tours gratuits double bubble l’exclusion de Classe Official passes if you like the conventional feel and head lottery earnings More over, United kingdom players can find many well-known and highest-high quality headings by the leading app developers Crypto Bonus can be obtained for claim once each day Subscription any kind of time of the best British on-line casino internet are simple and totally free By the emphasizing such issues, professionals is ensure a safe and you may enjoyable on-line casino sense Paysafecard Casinos on the royal vegas casino 25 free spins internet And Gambling Web sites You could take pleasure in effortless mobile betting and you may good sublime affiliate experience across the the gizmos With different labels however, identical legislation, design and you may winnings, the option is perfectly up to you You’ll be able to see easy cellular gambling and you may good sublime user feel all over the products You will find collected a listing of a knowledgeable minimum put casinos available to United kingdom professionals Neptune spends HTML technology to support gameplay to your mobile These types of solutions be certain that a thorough gaming experience providing to any or all choice You don’t need to dedicate a huge sum of money in order to provides an opportunity to win Therefore, get on their protect and do not carry it also undoubtedly! Subsequently you’ll be able to obtain insight into exactly how the fresh web based casinos are identifying by themselves in britain Unibet Casino Inventaire scratchmania casino login & Annotation 2026 Neptune Gamble balances sportsbook, gambling establishment, and you can esports gambling, with a powerful range but some openings Predicated on our very own comprehensive browse, i selected a knowledgeable spend from the mobile casino to own British users MrQ Local casino really does a good occupations having its products Including points are put-off deals, taken cards, otherwise any questions regarding exchange techniques The process remains similar, but keys may seem large for easy scraping If you cannot think about your details, start the new reset from the Mr Vegas log on page