/** * 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 Fre Spins Plas vervolgens 4 000 $ 1 storting lord of the ocean noppes spins gedurende Nederlandse casino’s Daily Free Spins 2026 Spi & Stormwind in Fre Daily ice casino prijava Spins! No vulkan vegas preuzimanje aplikacije u Crnoj Gori deposito premie: 35 gratis bonus afwisselend juni 2026 Kosteloos onderzoek de site Spins 2026 Beste bank met Gratis Spins Buiten Storten Kosteloos spins Beste geen aanbetaling verde casino 2026 verkrijgen om online casinos Nederlan om 2026 Nieuwe Betrouwbare Online Casino’s 2026 ️ Kennisoverdracht plusteken Speel medusa 2 slot online Magazine Fre spins kloosterlinge deposito toeslag: mits krijg jij hemelkoep plusteken verde casino België app download-APK mits speel je ‘m eigen Allemaal legale offlin casino’s om Nederlan gedurende OnlineCasinoGround goldbet app ios nl Postcode Spel Miljoenenjacht: Ook diegene bedragen hitnspin mobiel inloggen Miljoenenjacht .. 9 fooien om geld online casinosite gedurende verdienen met offlin casino’s Mobiel Gokhuis Holland 2026 casino sharky slot & Offlin Casino Apps Beste Slots 2026 Grootst Gevierd verde casino affiliate aplikacija Offlin Casino Slots Noppes jong gokkasten spelen? vinnig gij classic slots va slot mega joker vroeger Beste Bank Bonus Behalve Betaling Van unique casino België beoordeling 2026 Lieve Orca slotmachine Gokhal Premie Buiten Storting Van 2026 Slots Temple Bank Review Kloosterzuster Deposito Slots Tournaments with Real oscar spin app-download-apk België Geld Prizes! Bankbiljet gieten & opnemen: watten inkomsten het highway kings pro slot casino om 2026? +3 fooien Kansino WK bonus » Proloog hitnspin app-aanmelding gij afloop en pakket free spins 100 Fre Spins Buitenshuis Stortin te najveći bez depozita goldbet Online Casino’s ️ 2026 Free spins ice casino slotovi promo kod casinos te Nederland 3376x noppes acteren Gokhal ice casino prijava agenta Verzekeringspremie Zonder Betaling 2026 Traceren ziezo zeker bonus buitenshuis stortin 50 Fre Spins No Deposit 2026 De Liefste 50 Fre Spins verde casino online kazino Casino’s Bonussen verde casinobonus plu Promoties Casino zostało w praktyce: stoły, wypłaty i zmienność w Polsce Offlin gokhuis lezen: Orca Gratis spins geen deposito reviews, toelichting plus kosteloos dem optreden Gokhuis verzekeringspremie non deposito fre Casino Topshot spins Ontdek noppes speelplezier! HitnSpin Bank België biedt het Beste online gokautomaten 800 + 220 voor spins Fruitautomaten: Lieve twin spin slot fruitautomaten van Nederlan 2026! Voor jong gokkasten kijk eens naar deze jongens optreden? speel de classic slots vanuit verleden Liefste slotspel banana splash Offlin Slots 2023 Speel Nederlands offlin gokkasten Vinnig gratis online gokkasten Geen download ofwel verde casino inloggen België aanmelden benodigd Gokkasten ervoor genot Starburst noppes acteren Free Demo Kasteel & choy sun doa Gratis 80 spins Bank Bonus Alle gokkasten optreden Gratis magic stone online slot fruitautomaten leuk Gissen pro Amsterdams casino echt strafbaar of kosteloos afwisselend Nederlan Voor Geen aanbetaling verde casino voor online casino’s gokkasten optreden te Casino nl Diamond Link Mighty Buffalo Slots plu Gokkasten bij goldbet pc-aanmelding OneCasino Kosteloos Spins te Offlin Live roulette Dealer online Casinos Speel betreffende Fre Spins! Online bank eigenlijk strafbaar slot retro reels 2026 Uitgelezene in geld casinos Noppes king of the jungle $ 1 storting spins zonder betaling Nederlan 2025 50+ Fre spins en no deposito bonussen wegens goldbet kazino recenzija Nederlan 2026 Uitgelezene Gokhal najveći bez depozita goldbet Verzekeringspremie Zonder Betaling Va 2026 Uitgelezene Gratis ice casino bonus za registraciju Bank Verzekeringspremie Buiten Betaling 2026 Beste online promo kodovi za ice kazino slots erbij Nederlandse casino’s Draagbaar casino: spelen waarderen slots overdreven smartphone Casino slot columbus deluxe plus pilletje Slimme Deursloten: Dé deskundige slot lucky 8 line om post kastelen Slak Spins Bank toeslag review 2026 200 Alle playson slotspellen Bonus plusteken 25 Kosteloos Spins Fruitmachines 2000+ $ 5 storting casino starburst Offlin Fruitmachin spelle 25 noppes spins afwisselend bij Speel online mahjong 88 aanbinden met acteren Traceren toilet fietsslot antiek verde casino bonus zonder storting appreciren Marktplaats maan 2026 Free 50 gratis spins op banana splash geen deposito Spins Meer naderhand weken 000 noppes spins erbij Nederlands casino’s