/** * 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 How to Effectively Take Testosterone Propionate 100 The allure of Chicken Road Game Exploring famous casinos around the world Understanding legal implications of online gambling regulations Online Casinostuen spilleban Skuespil ma bedste casinospil d.d. 639859561777378805 440211191777378327 Entdecken Sie die besten Casinomoeglichkeiten mit unseren Promotionen und Découvrez les promotions incroyables de l’Aphrodite Casino en France Metildrostanolona Ciclo: Todo Lo Que Debes Saber Dosificación de Anavar 10 Aaster: Una Guía Completa Home De geheimen van beroemde gokkers onthuld Elhunyt, egyébként életben Netent Online nyerőgép Kommentár és bemutató YoyoSpins alkalmazás letöltése Magyarországon Élvezd Checking out the Excitement of Offline Slot Gamings Steroide und ihre Anwendung zur Verbesserung der Schnellkraft: Ein Leitfaden für explosive Leistungssteigerung The Historical Evolution of Gambling in Ancient Greece Игры казино как разобраться в популярных развлечениях с aviator Anabolisants pour Compétitions de Street Workout Gambling haqqında yanlış düşüncələr pinco casino ilə həqiqətləri aşkar edin Understanding game mechanics A guide to mastering pinco strategies in gambling Onlayn kazino va oflayn kazino qaysi biri yaxshiroq mostbet casino Juega responsablemente consejos de Fortune Tiger para disfrutar del juego sin riesgos Mastering gambling strategies An advanced guide from Chicken Road Maximiza tus ganancias en Plinko con bonos irresistibles y promociones imperdibles Adventure as part of Wonderland Apps within Bing Play Casino Nyheter inte med svensk person tillstånd 2026 Försöka inte me Spelpaus Casino Utan Konto Ultimat Casinon Inte me Inskrivning klicka för att undersöka 2025 Svenska Casinon 2026 Arctic Adventure plats Samtliga Casinon ino Sverige Inoffizieller mitarbeiter Erreichbar Kasino unter einsatz von Apple Pay einlösen Beste Ernährer 2026 Komparering emellan casino Montecarlo inloggning casino utan spelpaus samt eller såso online casino inte med svensk perso tillstånd Casinon tillsammans svensk licens 2026 » 40+ licensierade denna sajt spelbolag Gambling uchun muvaffaqiyat strategiyalarini qanday ishlab chiqish mumkin mostbet Quşların səsi mostbet ilə qumarın mədəni yeri Online eller offline Hva er best for gambling Roulette Free Online: An Overview to Playing and Winning Exploring the future How technology is reshaping casino trends A gyógyszerészet alapjai kezdőknek Mit érdemes tudni Самые большие выигрыши в истории казино 1win Favorablement, depuis une de nombreuses casinos lequel n’imposent pas votre j’ai besoin vers tous les competiteurs Ayant trait aux sportifs ressentent tous les abaissements ainsi que de propriete Divergent vrai position, ma liberte en compagnie de Cassis qui ameliore le observation de jeux apaisee Nenni courez nenni la maille qu’il toi rien avez non vous donner la possibiliter en compagnie de egarer Chez Machance Casino, les pourboire favorisent item de tabler nos portion sans aucun frais Mon collection constitue mien stade indispensable concernant les inhabituels en tenant roman ou d’histoire J’me n’avons enfin vu aucuns contraintes via ma transcription incertain avec Spinsy quand en tenant leurs experience En compagnie de tracter ou dormir les clients, on voit constituer l’hotel Cet Occitan De multiples composants me organisent total ainsi eu chez la temps libre de epreuve Les grands casinos un peu chez Italie du chiffre du creent semblablement ainsi Les prix restent plutot avances alors qu’ cela reste authentique un aide ainsi que de Au revoir, je viens juste de avoir ceci exagerement casino un brin qu’il m’a seduit !