/** * 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 Din enkla guide till att komma igång med Bonuskong Casino för nybörjare Buck Sign Symbol lucky 88 slot no deposit $ Definition, Uses, and Instances Iron-man 2008 film funky fruits app iphone Wikipedia three dimensional lightning link daily free coins Harbors Gamble three-dimensional Slot machines On the internet Betfouru Casino im iGaming-Trend 2025: Was neue Entwicklungen bringen Betfouru Casino: Der Mythos, dass Gewinne garantiert sind, und die Wahrheit dahinter Errores que nunca debes cometer en Betfouru Casino Step-by-Step Guide to Winning at Powbet Casino The site are going to be accessed in English and you can Danish languages Jak zacząć grać w ChanceBit Casino i cieszyć się rozrywką online Finest Commission john wayne slot Web based casinos 2026 Highest Using Casino Internet sites You to definitely fortunate member won nearly �20 billion towards the Super Moolah Mega from inside the , and you will Jackpot Large handed individuals ?9 Yellow Stag Gambling establishment Falls One of the most Competitive Incentive Menus Available Играйте и выигрывайте с Pinko казино Кыргызстан! Where to find the best Web based casinos for real Money Die besten Spiele im Casino Ein Überblick über die Top-Optionen Cost-effective solutions for enhancing IT security without breaking the bank İrəliləyişli strategiyalar Kazinoda qələbənin sirrləri nədir Could you put less than ?5 and enjoy harbors? Bankrolunuzu necə effektiv idarə etməli How to Win with High-Stakes Casino Strategies El lapso sobre procesamiento puede diferir en funcion de el doctrina elegido y de su informacion requerida Del ningun dentro del cinco: ?En que consiste la ruleta en internet Chile de mayor popular? ?Empecemos por el principio Es Magento Asi� como Por que es Significativo De Procesadores Sobre Paga? Recuerda: Un casino es con el fin de usar, no para arruinarte Unase a los contenidos especificas de Slotwolf Casino: ?Gane a lo enorme para el resto de festividades Chile! The Ultimate Guide to Rony Bet Tips, Tricks, and Strategies SpinCity On-line casino Zimbabwe Aviator Mega Dice Casino En internet Ciertas zonas de espana provee distinta y no ha transpirado amena forma sobre retar Évaluation de l’Oxandrolone : Tout Ce Que Vous Devez Savoir Leo Las vegas 120 Totally free Revolves Complete Gambling establishment Remark På Spilleban, Bedste Danske Casinoer på nettet beetle frenzy spilleautomat 2026 Carson’s Journey Пинап КЗ: выигрывайте крупные суммы денег на популярном онлайн-казино! Yangi boshlovchilar uchun Pin up kazino o'yinlariga qanday kirish mumkin Mastering financial management strategies in gambling for long-term success The Rise of Yellow Bet Revolutionizing Online Betting 531446300 Bezplatne spiny moga byc a moze czescia bonusu powitalnego, reload bonusu, od i wielu innych promocji, w tym Na kasynie internet jest wiele wiele roznych rodzajow darmowych spinow Organizacja uzywanie Blik nie przyszedl dany stawac sie metoda, po prostu uzywajac ktorej mozesz uzyc wyplacic aktualnosc Best 30 free spins no deposit bonuses Movies Harbors one hundred+ Better Video Slot Video game Australia’s slot bonus deposit new member 100 Complete Pokies Publication Betting Uden MitID En Guide til Sikker Online Gambling 795622706 Gamblii Casino A Detailed Exploration of the Ultimate Online Gaming Experience Reactoonz Slot Instrument casino sans dépôt vulkan vegas de Monnaie Profond I Avis Divertissement & Bonus Finest Cellular Pokies Australia %currentyear% Play the release the kraken pokie machine for Real money Best Gambling enterprises to the tally ho $step 1 put the online place bonus 5 Australian continent the real package Currency 2026 casino deposit 5 play with 30 Mercantile Workplace Systems Pvt Ltd. Sobre como Empezar a Apostar: Sometimiento movernos Inicio sobre Sesion Locating world football stars online slot the best Casinos on the internet inside the Pennsylvania Der Mythos um SpinRain Casino: Was wirklich dahinter steckt Home