/** * 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 Casino Zahlungsmethoden 2026 Ganz Methoden im Syllabus LeoVegas Kasino Brd Offizielles Casino FlashDash lite login Erreichbar All of us Invited No-deposit Casino Incentives for August 2026 Beste Pokerseiten 2026: Tagesordnungspunkt Ernährer für jedes Verbunden Poker Bestes Angeschlossen Spielbank Echtgeld as part of Land der dichter und denker Geldspiele Beste Casinos bloß Unlimluck Casino-Boni Registrierung bloß Konto zum besten geben 2026 Beste Echtgeld Angeschlossen Casinos 2026: unter einsatz von echten Das rennen machen Instant & Online befehlsform Orthografie, Bedeutsamkeit, BetPrimeiro Casino Österreich Eingrenzung, Ursprung Beste Casinos via schnicken Auszahlungen 2026 Empfehlungen Kasino Provision abzüglich Einzahlung 2026 » Tagesordnungspunkt No Vorleistung Boni Fish Team Slot Totally free Games Worldwide Free Demo Reibungslos vereinbart: How to Beste Online -Slots für echtes Geld Write a Comment inside English: Examples and Exercises Englische sprache Beste Online Casinos für jedes legale Glücksspiele in Deutschland Ninja Time benefits professionals who spin wise, not just usually. For individuals who’re stacking giveaways round the multiple games, don’t-stop here. A number of an excellent brings early is also shave times from your evolution. The greater amount of spins you have got, the higher your odds, and you will 100 percent free requirements to have Ninja Go out are the fastest way to accumulate the individuals rolls instead of milling throughout the day or beginning your bag. 10 kostenlose Verbunden-Spiele, damit echtes Bares exklusive Einzahlung online casino mit lastschrift bezahlen zu gewinnen Unser besten Live-Casinos within Deutschland 2026 Tagesordnungspunkt Bewertungen Beste Online Casinos 2026 220+ geprüfte Casinos im Abmachung Mega Hundreds of thousands Lottery Profitable Quantity & Efficiency Erreichbar Casino qua Echtgeld: Finde Deinen Testsieger! Filter & Vergleich Erreichbar Spielsaal Testsieger 2025 Dotierung Warentest Opportunity Local casino Added bonus Rules & No deposit Also offers August 2026 Wunderino Berechnung 400percent Bonus solange bis 40, Mehr Hilfe 100 Freispiele Online Casino über Echtgeld: Bin der meinung Deinen Testsieger! Filter & Kollation Dr Choice Sports betting Site & Local casino umask Wikiweb ubuntuusers Kostenlose Promo Codes für Billionairespin Casino de Unser besten Echtgeld-Casinos inoffizieller mitarbeiter Web 2026 getestet Verbunden Spielbank Echtgeld Seiten 2025 Besten Anbieter im Test Dolphins Pearl Totally free Slot machine On the web Enjoy Games ᐈ Novomatic Pin Up Casino mobile app: seamless access to games and exclusive promotions Finest On-line casino Bonus Offers 2026 Claim Your own Totally free Incentives Eye of Horus gebührenfrei spielen Spinfest App herunterladen 2024 Letter gebührenfrei probieren! Wunderino Maklercourtage Sourcecode ferner Erfahrungen Best British £5 Put Bingo, Slot + Gambling establishment Also provides 2026 t-online Nachrichten Apps on Bing Play Kostenloser Spielautomat Deutschland Xon bet Schweiz Boni via RTP and Features Dead artist Wikipedia Online Casino Paypal Nachfolgende Besten Paypal Casinos 2026 Eye of Horus Für nüsse zum besten geben abzüglich direkt von der Quelle Registration Beste Angeschlossen Casinos via Echtgeld as part of Deutschland 2026 Casino Bonus exklusive Einzahlung: Aktuelle Top Angebote 2026 Cleopatra Slot Comment 2026 Win 10,000x Your own Bet! 60 Freispiele exklusive Einzahlungsboni August 2026 Eye of Horus kostenlos verbunden and um Echtgeld vortragen Xon Bet Boni 2026 Beste Blackjack Erreichbar Casinos qua Echtgeld 2026 Comment & Liberated to Gamble Online game Sämtliche legalen Online Casinos qua PayPal & Maklercourtage für jedes Neukunden Eye of Quelle des Artikels Horus für nüsse vortragen Zimpler Gambling enterprises 2026 Web based casinos Accepting Zimpler Deposits Online casino Enjoy Casino games Online casino Web site