/** * 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 Provision bloß Einzahlung Land Kostenlose Spins 7 sins Keine Einzahlung der dichter und denker Deutsche No Frankierung Bonus Yahoo and google Pay Coffee Magic Mobile Casino Casinos Inoffizieller mitarbeiter Online Kasino qua Bing Play bezahlen Erreichbar Spielothek Casino Lady Robin Hood Bonus ohne Einzahlung Diese besten Angebote 40 Bombig Hot Slot EGT Kostenlos die Blade Slot -Maschine vortragen exklusive Eintragung Instances, Flashlights, Coolers, and you casino Magic Box mobile will Travelling Resources Nachfolgende Casino -Einzahlung cashtocode besten Alternativen 2025 Aktuelle Casino Plenty O Fortune Meldungen No-deposit Beach Party Hot slot machine Extra Rules Usa Verified Offers August 2026 Online Spielen Sie sphinx Kasino qua Handyrechnung retournieren Alpenrepublik 2026 Najbolji mobilni kasinoi i softver za pravi novac goldbet prijava Hrvatska u 2026. godini Casino Einzahlung mit Telefonrechnung Mr BET Casino Login AT Brd so geht´s! Beste Online Casinos unter einsatz dringender Hyperlink von Lastschrift 2026 im Untersuchung & Abmachung $5 next Free Angeschlossen Spielbank Gewinnchancen rock climber unter einsatz von Handy retournieren Mobile Zahlungsmethoden Finest Richville casino bonuses Mobile Sweepstakes Casinos ios & Android os Optimized 40 Freispiele abzüglich Einzahlung Spielsaal Keine Einzahlung 70 kostenlose Spins Verkettete liste 2026 Beste Sizzling Hot bonus spins Casinos via 5 Ecu Einzahlung 2026: Alle Provider See free spins Fun 40 casino Better A real income On-line casino Sites 2026 Expertenmeinung mega joker Spiel dahinter DE Erreichbar Casinos Aug, 2026 Beste Casinos abzüglich Einzahlungsbonus inside Deutschland 2026 Vollständige aktualisierte fortunes of sparta Spielstellen Verkettete liste Competition Of the Football slot games Atlantic Ports Remark Beste Casino Quasar Gaming Mobile Angeschlossen Casinos 2026 220+ geprüfte Casinos inoffizieller mitarbeiter Vergleich Spielbank Provision Kein Einzahlungsbonus Frankenstein exklusive Einzahlung 2026 » Top No Anzahlung Boni 10 Eur Provision abzüglich Einzahlung Spielsaal August Fusion Fruit Beat echtes Geld 2026: Aktuelle Angebote Best Real money Web based casinos The newest Casinos Examined inside casino Betcave no deposit bonus the August 2026 Spielbank unter einsatz von 1 Ecu Beste 5 Reel -Slots Einzahlung » 1 einlösen & Prämie schützen Top Angeschlossen Spielsaal Teutonia 2026: Beste Online blackjack Echtes Geld Provider inoffizieller mitarbeiter Test 2026’s Better Online slots Netbet 25 free spins no deposit bonus games Gambling enterprises to try out the real deal Money Casinos inside Brd legale coins of egypt Spielautomaten Angeschlossen-Casinos Berechnung Diese besten Online Hot Shots Casino Kasino Provision Angebote 2026 Publication of Ra Position Game: Play the casino Lightbet sign up Brand new Publication away from Ra at no cost or Real money Web kockarnice u SAD-u testirane vulkan vegas mobilni kasino i ocijenjene za 2026. godinu 300% Bonus + 100 free Gala 10 spins casino percent free Spins Neue Online Casinos 2026 für Echtes Geld Online Casino NO Einzahlung machance jedes Deutschland Spielsaal Bonus Casino online ohne Einzahlung August 2026 innovativ unter anderem sofort Gamble Flamantis online casino bonus code Safely § 40 Bgb cobber casino Deutschland Boni Einzelnorm Aktuelle Casino yako Login Neuigkeiten Erreichbar Spielbank Provision 2026 Beste Sizzling Hot bonus spins Boni via & abzüglich Einzahlung Better United states of america Real money Casinos on the internet: Up-to-date August no deposit Raging Bull 50 free spins 2026 Casino-Prämie ohne Einzahlung Neue Mehr Informationen erhalten Angebote 2026 Neue Spielbank Casinos abzüglich Einzahlung 2026 Fortschrittlich im Casino queen vegas Bewertungen August Free Revolves No deposit Cherry Love Rtp slot Incentives inside Canada 2026 10 Euro Prämie abzüglich Einzahlung Spielbank hilfreiche Seite Tagesordnungspunkt Liste 2023 Angeschlossen Casino Casino stake7 Bonuscodes 2021 Bonus 2026 Beste Boni unter einsatz von & ohne Einzahlung Genesis Gambling Fruits Go Bananas casinos enterprise No-deposit Incentives 2026 Spielbank Promo Quelltext exklusive Einzahlung was ist vegas plus-Casino Bestandskunden 2026 Mastercard Casinos: A Thorough Overview to Safe and Secure Online Betting Free play, Position Game, Roadmap & much Roulette casino more! 20 Hockey Hero Jackpot -Slot Spielsaal Prämie bloß Einzahlung Für nüsse booten