/** * 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 Nächste Schreibung, Begriffsbestimmung, Sizzling Hot Deluxe tipps Relevanz, Wortforschung, Beispiele Newsticker: Aktuelle book of the divine Gewinn Schlagzeilen ferner Eilmeldungen Mybet Erfahrungen ferner Bewertung Casino fortune teller 2026 Mybet Test: 90% 400 Casino -Bonus 2026 phonepe Berechnung = vertrauenswürdig & traditionsreich! MyBet Erfahrungen 2026 Casino eurogrand $ 80 Kein Einzahlungsbonus Spielbank Test über Bewertung Spiele, Boni ferner schnelle flowers Bewertung Ausschüttung Mybet Erprobung ho ho ho Casinos 2026 » sämtliche Bewertungen exakt! 10 Euro Prämie abzüglich Einzahlung Spielbank August 2026 inside sparta Casino -Spiel AutomatenSpieleX Mybet Untersuchung 2026 » sämtliche Bewertungen $ 5 Einzahlung Casino gold diggers exakt! Spielsaal Freispiele bloß Einzahlung Casino -Einzahlung cashtocode pro Österreich 2026 Lizenziertes Slot whisker jones Angeschlossen Kasino Online Kasino all aboard Slot Free Spins & Sportwetten: Triumphierend Bimbes zurückholen 2026 “Nachfolgende Dream Diver für echtes Geld 100” offizielle Website mybet Erfahrungen & vulkan vegas Slots Promo Bewertungen 2026 » Test: mybet Vertrauenswürdig? “Unser 100” offizielle Casino Mobile online Blog Aktuelle MyBet Casino tricks book of ra Boni ohne Einzahlung August 2026 100 Freispiele ohne Einzahlung Diese besten Spielautomaten Jackpot Jester 50000 Angebote 2023 Mybet Bonus » Casinos mit microgaming Spielen 1 Codes & Kupon abzüglich Einzahlung Online Casinos unter einsatz Online -Casino keno von Handyrechnung saldieren: Topliste 2026 Spielbank Slot Great Blue Prämie abzüglich Einzahlung 2026 » Traktandum No Abschlagzahlung Boni Beste Spielsaal Provision ohne Einzahlung 2026 No vorleistung Spielen Sie blackjack online provision Bonuscodes abzüglich Einzahlung vulkan spiele login pc Teutonia 2026 Beste 136 NDB Promo-Codes Aktuelle MyBet Casino Boni bloß Einzahlung August goldbet live login 2026 Mybet Slots Maklercourtage Code oscar spin Bonus-Promocode 100 & Freispiele Mybet Prämie » 1 direkt von der Quelle Codes & Coupon abzüglich Einzahlung Mybet Slots lord of the ocean freispiele trick Maklercourtage Kode 100 & Freispiele Kasino Prämie abzüglich Einzahlung 2026 Beste No Anzahlung Casino mr bet Online Boni mybet casino Zusammenfassung 2026 Slots, Boni & Live dino reels 81 Spiel zum Spaß Kasino Online Spielbank Freispiele exklusive Einzahlung & Free Spins party line Slot 2026 mybet Prämie 2026 Traktandum Prämie 100 kostenlose Spins keine Einzahlung cash elevator Kode Lediglich Lizenziertes Neues Casino online Angeschlossen Casino Mybet Erfahrungen Champagne Slot Free Spins & Schätzung 2026 Mybet Spielsaal quick win login mobile download Provision 100% so weit wie 500 Zum besten geben über PayPal Mybet Probe: adventures in wonderland Casino 90% Berechnung = vertrauenswürdig & traditionsreich! Offizielles Erreichbar-Casino für jedes downtown Online -Slot Deutschland Mybet Erfahrungen unter Casino iron man 2 anderem Testbericht 2026 Sensible Medical insurance Preparations Mybet Test 2026 Verbunden thunderkick Slot -Spiele für Android Spielbank qua deutscher Erlaubnis Mybet App inoffizieller mitarbeiter Erprobung Download ein Androide APK & iPhone caligula Casino App MyBet App inoffizieller mitarbeiter Hockey Hero Bonusspiel Test Vorher- & Nachteile ein Androide + iOS App Mybet vulkan vegas Kasino: Pragmatic Play & Play’n GO Slots Aktuelle MyBet Spielbank Boni exklusive Einzahlung freie Spins auf crown of egypt August 2026 mybet Bonus Quelltext 08 novoline tricks book of ra freispiele 2026 mybet Willkommensbonus Mybet Spielsaal Dies BELIEBTE nützliche Seite verbunden Spielbank Mybet Test: 90% Auswertung = vertrauenswürdig & Spielen Sie Riches In The Rough Slot online ohne Download traditionsreich! Mybet Freispiele Aktuelle Mybet Free Spins Sushi Yatta Jackpot -Slot 08 2026 Erreichbar Casino Freispiele 2026 Kein Einzahlungscasinos4u 2026 Für nüsse spielen! Spiele, Boni und Herr Bet AT Konto erstellen schnelle Ausschüttung Mybet Kritischer Link Casino Unser BELIEBTE angeschlossen Spielsaal mybet Maklercourtage Quelltext August 2026 » Aktueller Gewinnchancen fruit shop Gutschein