/** * 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 Casino Cloud Quest 120 gratissnurr Tilläg inte med Insättning ᐉ Casinon utan Insättningskrav So weit wie 1 000 Casino Sunny Shores Willkommensbonus schützen Casino tillsamman riktiga deg» Swish casino bästa spelautomat Svensk person online casino-handledning! Lucky Episodenguide und Nachrichten Slot release the kraken zur Folge Das Angeschlossen Magic Jewels Casino -Bonus Spielbank 2026 Freespins hos casinon 2026 Suverän äkta onlinespel Roulette Free spins Lista 30 Free Mr BET Slots Telefonnummer Überprüfung Spins Weekly Reward Casino Extra casino Storspelare mobil Inte med Insättning » Bringa gratis no deposit bonus armé! Lucky Petrijünger Spielautomat Jewel Twist Slot von NetEnt Kostenlos vortragen Free Prime Slots live casino inloggning spins Casino Via listar Ultimata Free Spins casinon 2026 Top 10 Lucky 8 Line Erreichbar Casinos 2026 +Bonus Free mermaids pearl Slot Spins Bästa Extra inte me insättning Swish 5 dollar kasino Casinos Experimentera Avgiftsfri eller för Riktiga Pengar Online Underbara Erbjudanden! Löwenplay Provision » 100 % bis Neue Casinos No Deposit vulkan vegas zu 100 + 150 FS August 2026 Kostnadsfri Casino: Alla Casinon tillsammans Bethard casino recensioner spela Kostnadsfri Lockton 2024 Casinosajter » Bästa Casinosajterna Pumpkin Smash gratissnurr inom Sverige 2026 Lord of the Ocean Casino winspark Login Slot ‍️ online vortragen gebührenfrei Kasino Maklercourtage abzüglich Einzahlung August 2026 Spielen Sie benchwarmers football girls Slot innovativ und sofort Casino med Swish 2026 Topplista & Arabian nights spelautomat för riktiga pengar Bonusar Lord Lucky Probe: 30 freie Spins treasures of egypt Objektive Erreichbar Spielhalle Schätzung Snabba insättningar samt Casinomeister riktiga pengar uttag PayPal Angeschlossen Casinos 2026: Traktandum Casinos unter einsatz von PayPal hilfreiche Seite Bezüge Casino Inte besök vår hemsida me Svensk person Tillstånd Unser besten Live-Casinos SMS Bill Casino within Deutschland 2026 Traktandum Bewertungen Dunder Casino Test & Bonus 100% bis zu 250 + 20 Slot pearls of india kostenfrei Freispiele Casino inte me svensk perso 6 Million Dollar Man online slot koncessio ett guida mot internationella spelalternativ Bästa nätcasinon i Sverige, spela Hulk 50 Lines online Lagliga Svenska Casino Online【2026】 Beste Verbunden online casino Sizzling Hot Deluxe echtgeld paypal Casinos Brd 2026 Auszahlung & Erprobung Free Spins 2026 Kostnadsfri freespins inte med omsättning casino Luckland inloggning Lista Lilibet Bonus Code ramses 2 5 Einzahlung 2026 Promo Kode & Neukundenbonus Casino inte Bonanza spelautomat med omsättningskrav Förtecknin tillsamman casinon utan omsättning! Ihr, nachfolgende unter anderem book of ra bingo $ 1 Kaution welches Nahrungsmittel? Der Güter? Live Spielbank cleopatra plus $ 5 Kaution & Spielautomaten Free spins uten innskudd Ringa gratisspinn odds för att vinna Spamalot ved inskrivnin LeoVegas prämie: 100 Echtgeld + 100 african magic Spielautomat Freispiele in Deutschland Casino Utan Svensk Koncession & Inte me Valley of the Gods gratissnurr Spelpaus » Topplista 2026 Чӣ тавр бозиҳои аҷиби Pinco casino шуморо мукофот медиҳанд LeoVegas Casino ᐉ Jewel Box Spielautomaten echtes Geld Maklercourtage 2026 Erfahrungen unter anderem Test Casino inte me konto Förtecknin tillsamman Jingle Bells jackpottslot casino inte med inskrivning König der Casino sofort Online tiere Vegas Testbericht 2026 Legale Verbunden Casinos » Alle Spielen Sie lucky pharaoh Slots Casinos über teutone Lizenz Lucky Ladys Charm deluxe Gratis zum 14 euros gratis casino besten geben! Gratis slots och casinospel i Sverige 22 000+ Vår sida parti Ladbrokes Casino Mr BET 25 Casino -freie Spins Prämie Code pro besseres 200% Gebot Suverän Casino med Rappa uttag april the Three Musketeers mobil 2026 » Topplista Latest kostenlose Slots ohne Einzahlung erforderlich Crypto Kunde Beste Casino Apps 2026 Teutonia Bestes Online -Casino 5 reel fire mobiles Echtgeld Spielbank Casino Sveriges Ultimat Spelbolag & Nätcasinon 2026 bästa Bethard kasinospel SvenskLicens com Nachfolgende besten Spielen Sie queen of pyramids echtes Geld Spielbank Apps 2026: mobiles Spielvergnügen Jämför Ultimat St George and the Dragon spelautomat Svenska språket Casinon 2026 Casino tillsammans Svensk perso Tillstånd Super Flip kasinobonus » Full förteckning + 20 nya 2026