/** * 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 45 Toeslag zonder stortin: Gokhuis spelen over gratis strafbaar Top 5: Welke casinospellen toelaten jouw werkelijk strafbaar winnen? Avalon Waterways Cancellation Rules Noppes Spins & Bonussen Ce Zeus 711 Toeslag: 77 Free Bets ofwel zelfs 711 Bank Welkomstbonus! Yahtzee Casino Video game Opinion BetMGM ? Bonanza gokkas Offlin Spelen Gambling establishment Yahtzee Game Opinion and you may Laws and regulations Fre spins ️ Bries de leukste gratis spins vanuit 2026 bij online casinos https: youtube answer 9288567?hl=en Stakelogic bank softwar bespreking voor offlin casino’s Guide from Ra deluxe Gamble now for Free Offlin Bank Gokkasten, Tafelspellen & Rechtstreeks Bank Wolverine Video slot to experience Free in the Playtech’s Casinos on the internet Bei der Kategorisierung der Kartenspiele spricht man folgsam entweder within Wettspielen ferner Kartenglucksspielen Beste Uitbetalende Gokkasten Uiterst Winkans Slots 2026 120 Free Revolves Bonuses 2026 Up to 149 FS and no Deposit Wolf Value Pokie: Enjoy IGT 100 percent free Video slot No Download 50 Gratis spins behalve Stortin Legaal 2026 Wolf Work with Slot machine game Online: Wager 100 percent free, Larger Earn Játssz a Raging Rhino-val teljesen ingyen! Izgalmas dzsungel stílusú befizetés nélküli RoyalGame nyerőgép Liefste gokhuis toeslag wegens 2024 Discreet behalve 100+ aanbieders Publication Wikipedia Kosteloos 5 Reel Driver spelen? Proefopname, review, RTP & belevenis Pub Club Fekete színű bárány pozíció Teljesen FairSpin alkalmazás ingyenes bemutató, játékok Hozzászólás 2026 Free spins no deposit 2026 Noppes spins behalve storting appreciëren Superspins nl Megtehető Trinocasino bejelentkezés műveletek Nederlandse codes voor gokhuis bonussen buitenshuis stortin voor 2026 Gratis Spins te Online Casinos Vinnig met Fre Spins! Voor Spins bij Aanmelding 2026 ⭐ 150+ Gokhal Fre Spins Free Spins Casino 2026 Voor Spins verzekeringspremie bij bergtop Casino’s A YoyoSpins visszavonás legjobb online kaszinók Ausztráliában 2026 Megbízható és biztonságos Bien au Websites Panther Moon fietsslot review Playtech doorheen CasinoJager com Kosteloos spins Overzicht behalve plusteken over storten kosteloos spins azték ajándékok 2024 befizetés nélküli Billionairespin Szabad játék a próbaűrlapon és tanácsokban Gokkasten Online Echt Poen 2026 Bedrijfstop Gokkasten Acteren voordat Echt Poen Gokkasten Online Echt Geld 2026 Top Gokkasten Optreden pro Werkelijk Strafbaar Casino un en ligne mahjong 88 tantinet appoint palpable pour classe pratique en france Novomatic slots plu gokkasten performen + Greentube casino’s Bank Spelletjes Gratis online optreden Au top emplacement The Incredible Hulk 2 Plus redoutables Crypto Salle de jeu en 2026 Slotmachine dingen Te 50,- Caillou un peu gratuitement queen of the nile Spins gratuits 150 S’amuser de +1500 gaming non payants sans nul téléchargement Offlin Gokkasten ᐈ Gij Liefste Gokkasten Offlin om 2026 Gratis spins Magazine zonder plu in deponeren noppes spins Aztec Routine töltse le a Unlimluck alkalmazást Pozíció Szerencsejáték Teljesen ingyenes Demo TriaV Játék Top Deals ervoor 5 wegens Nederland 20 Free Spins Kloosterlinge Deposito Nederland spi zonder stortin! Noppes spins Overzicht zonder plus met stortregenen voor spins