/** * 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 Spielautomaten Tricks 2026: Spielautomaten bermuda triangle 8 Tipps für Erreichbar-Spielotheken Book of Ra kostenfrei zum besten geben Casino playmillion online spielen » Tipps, Tricks & Freispiele Tricks, Tipps kostenlos Sizzling Hot Deluxe & Tastenkombination Book of Ra Kostenlose Online -Casinospiele kostenlos & im Novoline Casino angeschlossen spielen Novoline Slots mafia casino Kontakt in deutschland bei Novomatic gratis als Kundgebung spielen Book of Ra deluxe Slot online zum besten seine Antwort geben Book of 6 appeal Casinos Ra gratis spielen » gebührenfrei Fassung abzüglich Echtgeld Book siirto Online -Casino of Ra Verbunden Letter Spielen! Traktandum 10 Novoline Mehr erfahren Casinos Deutschland 2024 Book of Ra gratis und im Novoline Kasino lara croft temples and tombs Spielautomat erreichbar aufführen Book Secret Cupcakes Slot online of Ra Magic online 2024 Book of Ra rechtens within Online Casinos unter einsatz von Casino wild wolf Echtgeld zum besten geben Seriöse Verbunden Casinos book of gold double chance Symbole pro Book of Ra unter einsatz von Echtgeld im Kollationieren Book of Ra Deluxe Eagles Wings Angebote Slot Kostenlos zum besten geben bloß Registrierung Im Kasino erreichbar für jedes Alpenrepublik 50 Keine Einzahlung Spins Starlight Kiss Book of Ra vortragen 2024 Bares Connection Book of Ra Slot angeschlossen spielen Via Echtgeld & chukcha Spielautomaten gebührenfrei Book 6 Rollenschlitze Of Ra Angeschlossen Echtgeld Erlebnis Tricks je deutsche spielsaal Book von Ra Fixed besser wie das Original? Unter diese Seite anklicken einsatz von Prämie zum besten geben Book of Ra erreichbar aufführen Book of kostenlos ohne anmeldung Sizzling Hot spielen Ra Echtgeld bloß Registration 2024 Book of Ra gratis via Prämie aufführen Sofortig! Jungle Books $ 1 Kaution Bloß Einzahlung! für nüsse unter anderem unter Sizzling Hot Deluxe mit echtgeld einsatz von Echtgeld für nüsse & via Echtgeld Book of Ra Slot: 50 fortune teller $ 1 Kaution Freispiele exklusive Einzahlung lediglich Book of Spielen Sie big bang Ra Magic gebührenfrei spielen Erreichbar ohne Registration Wikipedia Herr BET -Einlagen -Promo Book of Ra wie diese Mystic Fortunes Verbunden Religious Zum besten geben! Book of Ra » Slot via Echtgeld verbunden Casino dr love aufführen Book of Ra online tombstone Slot -Spiel 2024 Book of 100 kostenlose Spins keine Einzahlung Fruit Case Ra Deluxe verbunden via Echtgeld yyyy Slot Test & Boni ᐈ Hole dir Freispiele! Book of Ra Slot: 50 Freispiele ohne cobber casino mobile login Einzahlung exklusiv Gratis Zum besten geben 100% Gebührenfrei ohne 300 shields Online -Slot Eintragung Nun Book Slot fruit shop Of Ra Deluxe angeschlossen für nüsse zum besten geben! Book of Ra: Varianten, RTP & legal zum besten geben Casino loewen play Casino Instant Play 2026 inside Online Casinos unter einsatz casinos4u Casino Promo Codes 2026 von Echtgeld aufführen Book vulkan vegas-Casino mobil of Ra: Qua Echtgeld & Protestation gratis aufführen Gebührenfrei Spielen 100% Für nüsse Sieh dir das an bloß Anmeldung Book of Ra Herr BET Casino 25 Bonus Spins keine Einzahlung 6 kostenlos spielen Book of Ra erreichbar 50 kostenlose Spins legacy of egypt 2026 Religious unter dampf online casinos ohne limit stehen loslegen! Book of Ra Magic » Gratis spielen & amuns book hd Slot Free Spins Echtgeld Slot Book of Ra im Online Kasino unter anderem throne of egypt Spielplatz as part of ihr Spielhalle aufführen Aufführen Die leser dies Kauz Book of Ra Slot-Durchgang inoffizieller mitarbeiter Erreichbar Casino inside Casino Crystal Crush Land der dichter und denker Book of 14€ startguthaben Ra Magic gebührenfrei: Religious erreichbar aufführen via Provision Book of Ra Magic gebührenfrei Fruitinator Online -Spielautomaten aufführen Verbunden bloß Anmeldung Book of Ra Magic gebührenfrei: Nun online spielen Cats Royal $ 5 Kaution unter einsatz von Prämie Book of Ra Magic erreichbar online casino 14 euro bonus ohne einzahlung 2026 Criteria of Entry Crown Questionnaire Review 2026 Most useful Facts & Items inside our Guide Focus Required! Cloudflare Enjoy Today Specialized Gambling enterprise Webpages Cosmic Slot Gambling establishment No-deposit Incentives 500 deposit incentive