/** * 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 Betrophy Casino: parhaat bonukset ja tarjoukset vuonna 2026 Die Vorteile von Steroiden zur Steigerung der Muskelkraft und -leistung während des Trainings Why AfroPari is the top choice for live betting enthusiasts: pros and cons explained Die Rolle von Steroiden in der Optimierung der Bodybuilding-Leistung Navigating the world of free spins and live dealer tables at Mirror Casino Η Μαγεία των Spinsy Ανακαλύπτοντας τον Κόσμο της Ψυχαγωγίας Oplev Bumbet Casino Danmark: top live casino og spændende slots i DKK Oplev Bumbet Casino Danmark: top live casino og spændende slots i DKK Steroide und ihre Rolle bei der Optimierung der Erholungsphasen im Sport Optimierung des Bodybuildings: Sicherer und effektiver Einsatz von Steroiden Fantastic Dragon Position On the internet Demonstration Wager Free Gladiator Casino slot games On line Totally free Gamble Video game and you may Comment That’s why we advice you choose a different sort of site which have a good higher Shelter Index The fresh new respect program is actually vastly increased and you will comes with free South carolina spins when you level up Scorching Luxury Position Games Trial Enjoy & 100 percent free Revolves Have no idea the rules getting Eu Roulette and/or differences between European Roulette and you will American Roulette? They are more established networks which have licensure away from acknowledged authorities overseas Co hráči objevují na fBET: oblíbené automaty a živé hry Co hráči objevují na fBET: oblíbené automaty a živé hry Lucky Jungle Casino: Ein Leitfaden für neue Spieler zu Boni und Live-Spielen Co hráči objevují na fBET: oblíbené automaty a živé hry Co hráči objevují na fBET: oblíbené automaty a živé hry Verzeichnis ein Live-Dealer-Casinos Muss sagen Live-Tischspiele 2026 Frank Kasino Brd 2026 Echtgeldspiele, schnelle Auszahlungen & Boni Pusulabet 912 ile Yeni Bir Online Oyun Deneyimi Casino Spybet UK Your Guide to Online Gaming Success Die richtige Dosierung von Cut Stack 150 für optimale Ergebnisse Including, click lower than to get into your personal no deposit added bonus password regarding Pet Gambling enterprise Test E 250 Effekt – Alles, was Sie wissen müssen Doxx Bet Casino SK – Váš Obľúbený Online Kasíno 1055746937 Oplev PlayOJO Casino DK 2026 Bonusser, Spil og Unikke Funktioner Slovmatic Casino SK – Detaily, Bonusy a Hranie Online Oplev Valhalla Casino DK Den Ultimative Spilleoplevelse 1073096046 Royal Casino DK – Det Bedste Casino i Danmark Bruce Bet Casino DK – Din Ultimative Spilleoplevelse 1068474140 SynotTip Casino SK – Detaily, Bonusy a Hry 1074302578 Etipos Casino SK – Detaily a zážitky z hry Go4Games Casino SK – Detaily, ktoré musíte poznať DoubleStar Casino SK – Detaily a Zaujímavosti 1060100656 EuroGold Casino SK – Detaily a Zážitky z Online Hrania Nike Casino SK – Najlepšie zážitky z online hazardu Fortuna Casino SK – Detaily, Hry a Bonusy 1057115218 ICE Casino DK – Det Ultimative Spilunivers 1072990515 Karamba Casino DK – Din Guide til Online Spil Oplev Vave Casino DK – Din Ultimative Spiloplevelse 1061836640 Die Vorteile von Royal Stars Casino: RTP, mobile Optimierung und eine große Auswahl an Jackpot Bet Casino DK – Din ultimative spilleoplevelse 1063755468 Bet Panda Casino DK – Din ultimative spilleoplevelse 1071141046 Oplev Verde Casino DK Din Ultimative Spilleoplevelse 1072687015 Die Vorteile von Royal Stars Casino: RTP, mobile Optimierung und eine große Auswahl an