/** * 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 Understanding the psychology behind gambling Why do we take risks Best Totally free Revolves You 2026 Put & No deposit Bonuses Правовые нормы азартных игр в разных странах что нужно знать о pinco Darmowe spiny bez depozytu nv casino graj darmowo Gewinnstrategien beim Glücksspiel So erhöhen Sie Ihre Chancen Budgetierung für Spielspaß So bleibst du im Rahmen Understanding legal regulations of gambling in different countries A comprehensive guide for Pinco Casino users Understanding the psychological strategies behind gambling A guide by PinUp Mastering strategies for winning at gambling A comprehensive guide La tecnología y su influencia en el futuro del juego responsable Descoperă Cele nv casino Mai Bune Banana Splash Slot Ci Bonus Joc king kong slot Să Magazie Sloturi Care Jackpot Progresis 2024 Understanding the social dynamics of gambling How Pin Up shapes interactions and behavior No deposit Incentive Rules Exclusive Free Offers in the 2026 NZ’s Finest $step 1 Deposit Casinos within the February 2026 Free Twist Bonuses once you put 1 Money! Steroidi e la loro importanza per migliorare i tempi di reazione nell’allenamento della velocità Discover the Exciting World of Gursha Bet – Your Ultimate Betting Experience Рейтинг онлайн казино 2025 топ лучших легальных платформ топ 10 казино онлайн рейтинг лучших Betting Hub Your Ultimate Guide to Sports Betting 386482347 Gamblingdə maliyyə idarəsi Pin-Up ilə uğurlu strategiyalar necə əldə edilər Better Online casinos inside Canada Better Online gambling Internet sites the real deal Money to possess Canadians. Casino Days India Bonuses and Promotions Explained Casino etiquette essential tips for a great experience at Pin-Up 155 Rotiri Gratuite deasupra mărţişor hugo $ 1 Depozit 2026: Joc Flaming Hot online Oferte să +150 Rotiri Insights from the floor Conversations with casino professionals about the industry’s future Meine wenigkeit teste unser KNOSSI Spielbank oder Wette (via echtem Zaster) Betting Uden Dansk Licens Hvad Du Behøver At Vide Explore the Thrill of Online Casino Admiral – Your Gateway to Winning Besondere Spielautomaten ferner Matches: In den Spielbank Nachrichtensendung die gesamtheit decodieren Gambling və zehni sağlamlığa təsiri Şansın arxasında gizlənən həqiqətlər Jak mostbet casino wpływa na Twoje finanse w świecie hazardu Yüksək riskli qumar oyunlarında Pin-Up necə qazanmaq olar Pregmax M-75 75 750Mcg Capsule Consejos para jugar de manera responsable con Pinup Лучшие онлайн казино в 2026 рейтинг ТОП 10 сайтов для игры в интернете топ 10 казино онлайн рейтинг лучших Känslor och spelberoende Hur psykologin påverkar vårt spelande Exploring the differences between online and land-based casinos Which is right for you Pinco Casino Казинон түүх Pinco casino-ын өгүүллэгийг уншина уу Beste Mobiele Online Casinowebsites: Een Uitgebreide Overzicht 2 hundred No deposit More and funky fruit pokie mac computer dos hundred or so Totally free Spins Real cash Offers Prepared to Twist? An educated Online slots games inside Canada 50 Totally free Spins Guide out of Lifeless enjoy rather than and make in initial deposit Shes a wealthy Lady Position Review Try this IGT Game to Juegos de tragamonedas en línea island have Totally free Better On-line casino Bonuses 2026 1x Bet Sign machance bono de bienvenida up Also provides Maybe not Raging Rhino position free spins way too long ago by the Juega king of the jungle Slot en línea sin descarga Betsoft Gaming Move Queen of one’s Nile Slot machine On the dolphins pearl deluxe Ranura en línea internet free of charge Gamble Aristocrat games Risultati dell’uso di Methenolone 10 Mg: la guida completa Этикет казино что нужно знать каждому игроку, чтобы выглядеть на высоте в Vovan casino Showboat Branson Belle casino karate pig 2026 Agenda & Passes Home