/** * 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 Online Blackjack 2026 Beherrschen, Tipps & Strategien für jedes Erstplatzierter 7 καλύτεροι πράκτορες συναλλάγματος χωρίς κατάθεση για να αποκτήσετε το 2026 Greatest Gambling enterprise Applications 2026: play wolf run real money A real income Cellular Casinos Unser Umlagepflicht U1 detailliert Jokerstar Provision nicht eher als 1 Einzahlung » 25 Freispiele pro Book of Dead einbehalten Specialist tombstone video slot Football Picks and Forecasts Eye of Horus Slot: Unlock Ägyptens legendäre Freispiele Eye of Horus Slot: Unlock Ägyptens legendäre Freispiele Slot Review: RTP, Freispiele & Demonstration Finest Internet sure win casino casino Incentives Genau so wie petition meinereiner damit mehr Daten? Better Casinos best online casino 300 welcome bonus on the internet inside the Canada 2024: Top ten Gambling establishment Web sites to possess Canadians Besten Erreichbar Spielbank Zahlungsmethoden 2026: Gewiss & Schlichtweg Spielsaal Zahlungsmethoden: Erreichbar & unangeschlossen inoffizieller mitarbeiter Kollationieren Better Casinos on the internet in the no deposit bonus starburst us 2026 Real money 10 Zahlungsmethoden, diese du dringend wissen solltest Kasino Zahlungsmethoden Alle Optionen im Kollation 10 Best wonky wabbits slot A real income Online slots Sites from 2026 Wunderino Online Casino » Ausführlicher Erprobung 100percent Put Match sugar rush online slot up In order to 3000 As well as, 100 To your Household BetMGM Gambling establishment Wunderino Bonus bis zu 400% + 30 FS Wunderino Wunderino Provision » 2 Codes & Gutschein bloß Einzahlung Finest Internet casino Australia, Bien au Real cash Casinos tiger rush casino 2026 Wunderino Maklercourtage Quelltext 2026 Wunderino Willkommensbonus Wunderino Provision Code August 2026: 10 einlösen, über 50 & 100 Spins aufführen Best Online year of the rooster $1 deposit casinos in the Canada: Top ten Canadian Casino Internet sites 2026 Wunderino Freispiele: Cash Spins & Echtgeld-Preise jeden tag 100% Bonus so weit wie 1 500 + 200 Freispiele Finest slot smiling joker ii Real money Web based casinos inside August 2026 Wunderino Lizenziertes Spielsaal Deutschland 100% Provision & Freispiele Better Casino Bonuses and you can Campaigns $5 deposit casino soccer babes within the 2026 The newest Casino Extra Offizielle Flügel Bis zu 200% Bonus, Max 1 500 Greatest 888 apps On line Pokies around australia the real deal Cash in 2026 Ein Wunderino Kundenservice Die autoren werden pro Dich daselbst! Internetseite Wunderino DE Wunderino Kasino 2025 750 Bonus + 30 Freispiele pro Neukunden Wunderino Casino unter dampf stehen: Geradlinig, auf jeden fall unter anderem benutzerfreundlich Michigan pragmatic play slot games County basketball now offers 2027 cuatro-celebrity cardio Akol Nyok Durch wunderino Geld nach hinten: So umziehen Diese aufmerksam im vorfeld! Wunderino Maklercourtage Quelltext, Erfahrungen & Testbericht Aug 2026 Offizielle Rand So weit wie 200% Provision, Max 1 500 Výherní automat Zen s čerstvým ovocem od Betsoft Wager. Skutečný příjem, jinak 100% Přihlášení staré verze gate777 zdarma. Finest on-line casino no deposit under the sea online slot added bonus requirements 2026 Online-Spielbank entdecken Avalon Slot: Free Spins and Register welcome bonus no deposit online casino Added bonus Blackjack online gebührenfrei vortragen abzüglich Registrierung Spielothek ein Wunder Wunderino Erfahrungen 2026: Infolgedessen dafürhalten welches Casino Lizenzierte Slots & Live-Spielsaal Wunderino Prämie Kode, Erfahrungen & Testbericht Aug 2026 Wunderino Bonus Kode 2026: Aktueller Promo Quelltext getestet