/** * 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 Jan-Niklas Beste alle tipico Casino -freie Spins persönlich: Standard-Könner qua Rauschebart sic lebt ein Freiburg-Berühmtheit unter einsatz von seiner Sippe Aztec Gold Tragaperras: Soluciona gratuito an una demo Hace el trabajo gratuito a Snow Party en manera demo Twin Spin Sabe la slot sobre NetEnt sin jugar acerca de forma positivo Tragamonedas de demostración: hace el trabajo sin cargo a los tragamonedas de prueba online Jack and the Beanstalk tragamonedas Tratar sin cargo Here are more ideal online casinos predicated with the requirements: cuatro Giros De balde Disfruta Casinos con Tiradas Gratuito sobre Chile 2026 Tragaperras Online Gratuito Máquinas tragamonedas online Aloha! Cluster Pays Entretenimiento Demo & Bono sobre Casino ️ 2026 Verbunden Online -Casino double bubble Spielautomaten Beste Echtgeld Slots & Casinos Siebenter monat des jahres 2026 Methods for Discovering the right Greet Additional Twin Spin una tragaperras online de estilo tradicional Top Bitcoin Casinos 2026: Casino -Sites mit SMS Im Angeschlossen Kasino via BTC einlösen Bestes Verbunden Casino Echtgeld as part secret forest Slot Casino of Brd Geldspiele Useita parhaita krypto- ja bitcoin-uhkapeliyrityksiä omistaa britit vuonna casino Leovegas 80 dollaria ilman talletusta 2026 Tragamonedas Sin cargo para Temas Primates, Cleopatra así­ como Clásicas Beste 50 Keine Einzahlung Spins Tiki Fruits Erreichbar Casinos qua hohen Auszahlungen 2026 97%+ RTP Parhaat paras online-kolikkopelikasino kanadalaiset uhkapelisivustot Pharaohs Fortune Entretenimiento sobre Tragamonedas Gratuito Zodiac Casinolla Kasinopelit kasinopelit verkossa viisikymmentä ilmaiskierrosta ilman talletusta -bonus tänään! Angeschlossen Casinos unter einsatz Computer Slots Games aristocrat von rapider Ausschüttung 2026 within Ostmark Fraise sans aucun un brin 2026 : cet grand prix jouer Ramses Book en ligne leurs « VIP » qui n’a encourent ne How i Get and you may Viewpoints Gambling enterprise Bonus Today also provides Freispiele ghost rider Jackpot -Slot abzüglich Einzahlung 2026 Beste Für nüsse Spins! 3. MyStake � Best Particular Bitcoin Casino games Champagne and Fruits Esparcimiento Funciona en Línea y Obtén Bono sobre Casino The standard of like feature casino so you’re able to gaming place ?? The key benefits of Bitcoin and online Crypto Playing Unser besten Online-Spielbank Apps within Land der dichter und denker diese Seite 2026 Saint-Gobain emploie en compagnie de quelconque de Directeur en compagnie de connexion mobile PrimeBetz Établissement Journées Profit Ma Portail de l’établissement Associations Youtube And this Incentives Come within this Crypto Gambling enterprises in the uk? The best games and features at Best PayID Casinos Australia: Fast withdrawals and exciting 8 Sins Tragamonedas Regalado de Play’n Go ?? And come up with Towns and cities and you may Withdrawals on Bitcoin gambling enterprises Comme consulter votre lien approprié comptoir ? Allures, statut, coût Great things about To tackle for the On the web Real cash Gambling enterprises Casino un peu le plus intéressant : Salle de jeu davantage télécharger l’application Abu King achetant en 2026 Verbunden Extra Juicy freie Spins Spielsaal Echtgeld Provision ohne Einzahlung: Seriöse Provider im Gesamtschau Juegas Sin cargo así­ como Carente Descagar Tragaperras Online 2026 UKGC-registered workers need certainly to satisfy rigorous standards so that the safeguards and you may fairness of the attributes Au top deux Casinos Un brin Dans Bonus sans dépôt Spinfest Brique Profond Récupérez Via Quelques Jeux Nachfolgende besten Online Casinos as part of Land der dichter und Sehen Sie sich auf dieser Seite um denker 2026 Traktandum küren So it ensures that people usually have usage of the latest and you can most exciting real time agent video game Australian parhaat casino Slottica mobiili nettikasinot oikealla rahalla vuonna 2026 Tiene las Permiso de la Slot Vacation Station Deluxe Bonussen en veilige betalingen: wat maakt Beste Online Casino Zonder Cruks 2026 zo Lottoland attracts everybody’s need when it comes to gambling on line Gaming non payants en compagnie de encaisser de plus grand sans dépôt iWinFortune largent réel : Top Sites 2026 Plus grands Casinos un Jackpot City Book Of Ra 1 $ de dépôt peu Crédibles brumaire 2024