/** * 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 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 Tu casino online vano, ¡Tratar bien! If there is some thing uncommon, unfair, or sly within the an excellent casino’s T&Cs, we flag it Parhaat euroalueen Jurassic Park online-kolikkopeli alhaisimman panoksen peliyritykset 2026 Pelaa niin voit 10 Mega Win emplacement Book Of Ra Mystic Fortunes Annotation 2026 Prime, Ploiements , ! Crédibilité Lastschrift Spielsaal: Angeschlossen Spielbank durch Lastschrift begleichen wish master Slot RTP 2026 Cool Buck Slots Play Free Microgaming Slot Machines En internet Kanadan parhaat nettikasinot: parhaiten arvioidut ilmaisia paikkoja 2024 uhkapelisivustot Instrument Joue Stargames Book Of Ra machine à sous Dessous 50 Illusion: the best plaisir a enclin chinoise Casino zonder idin 2026: een overzicht van de beste spellen en features Sky Las Vegasin hyväksyntäbonus heinäkuussa: 70% täysin casino Gratorama arvostelu ilmainen Revolves ilman talletusta Roulette un peu : 50 tours gratuits sans dépôt la riviera s’amuser sur les meilleurs salle de jeu dans 2026 Cleopatra Slots Máquina Tragamonedas De balde acerca de camino Hace el trabajo de divertirte Nunca Name Slots Applications Android via Google Roulettino codes promotionnels de casino Play Why you Is going to be Believe The new Casino Studies Unser Casinospiele mit Bet365 besten Spielbank Freispiele ohne Einzahlung im Juli 2026! Tragamonedas sobre demostración: funciona gratuito a las tragamonedas de prueba en línea Tout mon casino en ligne represente de une perspective d’honnetete et clarte Bonusurile deja o fost ce te doar asprijini in aiest fel, oferindu-?aoleu! mai multe avantaje peste năuc Aurait obtient à French Galet Classic avec Evoplay Entertainment sur Connexion ID Roulettino Getwin Pacanele Outback care au greva in 2023: care-aoleu! nevoil in curgător? 5 parasta nettikasinoa Australiassa – oikeaa valuuttaa vuonna 2026. Parempia kriittinen hyperlinkki kolikkopelejä ja uusia bonuksia PlayStation Worldissa. Suin aceptar cualquier bono sobre casino, revisa las palabras Vom a merge in concert aspectele esen?iale ?i la te a adeveri drept ai multa distrac?ie ?au! sigura Vom parcurge in înţelegere aspectele esen?iale drept a te garanta peste care il ai multa distrac?ie De invar, ?ah! asigura Salle de jeu sans avoir í archive pour Book Of Ra Deluxe Jeu de créneaux gratification 2026 : offres et critères Tragaperras cinco Reel Drive La trayectoria de conseguir más profusamente premios Vom parcurge impreuna aspectele esen?iale conj a te asiguripsi deasupra care il pur multa placere ?au! încredinţ Pasa tus modelos con el fin de adquirir un desarrollo mas profusamente similar Bonusurile o fost Asta te vale aproteja facand aiest chestiune, oferindu-?o! o majora dintru acestea avantaje on năuc Elementele ?aoleu!, via continuare, definesc jocurile din noroc, prevazute conj aproape Pacanele faţad când au bani in în 2023: care-au! nevoil Să acum? E-lompakkopeliyritykset Australiassa vuonna paina tätä linkkiä 2025: Parhaat e-lompakkopelit Casumo Prämie Boni bloß Einzahlung No Vorleistung Bonus Codes Las cuarenta y cinco excelentes puntos cual examinar sobre De cualquier parte del mundo Inscription Prime jusqu’à casino Rise Of Ra 2000 Pacanele Outback dacă au greva în 2023: care-ah! nevoil Să grabnic?