/** * 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 Gladiators Angeschlossen Zum besten geben Gladiators Verbunden Aufführen Book Of Ra 10 Gratis Zum besten geben Ohne Registrierung Hearts Aufführen Hearts Spielen Gladiator Vortragen Kostenlos Online Dolphins Pearl Gebührenfrei Vortragen Ohne Anmeldung Ghost Slider Angeschlossen Gratis Gladiators Gladiator Browsergame Gladiators Gladiator Slot Angeschlossen Vortragen ᗎ Alle Wichtigen Aussagen Hierbei Lesen! 10 Ecu Maklercourtage Abzüglich Einzahlung Casino 2024 10 Startguthaben Kostenlose Zum besten geben Bloß Registrierung Hierbei Gladiators Erreichbar Unter einsatz von Provision Um Echtgeld Vortragen Bei keramiken Gladiators Erreichbar Über Prämie Um Echtgeld Vortragen Aufführen Gladiator Slot Freispiele Epic Gladiators Zum besten geben Tiplix Für nüsse Abzüglich Registration Für nüsse Unter anderem Ohne Eintragung Vindex Gladiator Erreichbar Aufführen Aufführen Gladiator Slot Freispiele Gabriel Der Gladiator Gratis & Ohne Registration Vindex Gladiator Online Zum besten geben Pass away Online Casinos Angebot 50 Freispiele Ohne Einzahlung Eingeschaltet? Gabriel Ihr Gladiator Gladiator Slotautomat Erreichbar Vortragen Cyborg Towers Gratis Aufführen Exklusive Registration Gladiator Gebührenfrei Angeschlossen Spiele Gladiator Attacks Gladiator Angriffe Spiele Gladiator Attacks Gladiator Angriffe Gladiator Spiele Die Online Casinos Angebot 50 Freispiele Abzüglich Einzahlung Aktiv? Gold Ausflug Verbunden Spielen Gebührenfrei Bloß Eintragung Gladiators Für nüsse Spielen Ohne Anmeldung Protestation Slot Online Gold Kurze reise Online Spielen Kostenlos Exklusive Eintragung 5 Typische Probleme Bei dem Website Vindex Gladiator Ghost Slider Über Echtgeld Online Vortragen, Hierbei Gratis Degustieren Gebührenfrei Aufführen Arising Phoenix Freispiele Abzüglich Einzahlung Sonnennächster planet Gratis Aufführen Exklusive Registrierung Via 95, Slots Kasino Bonus bloß Einzahlung Siebenter monat des jahres 2026 Gratis Aufführen Arising Phoenix Freispiele Ohne Einzahlung Gebührenfrei Vortragen Arising Phoenix Freispiele Ohne Einzahlung Freitragend Inoffizieller mitarbeiter Inter browser Zum besten geben Religious Gratis Solitaire Zum besten geben! Legale Verbunden Casinos: Gewiss vortragen inside geprüften Anbietern Legale Erreichbar Casinos: Gewiss aufführen in geprüften Anbietern Spielbank Maklercourtage abzüglich Einzahlung Julei 2026 10 Ohne Einzahlung Inoffizieller mitarbeiter Mr Bet Spielbank Maklercourtage 50 Euroletten Provision Ohne Einzahlung Spielsaal 2024, 50 No Abschlagzahlung Ghost Slider Gebührenfrei Zum besten geben Alleinig Eintragung Ghost Slider Kostenfrei Slots Qua Hoher Disparität Vortragen Bloß Registrierung