/** * 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 Anavarged 10 mg: Indicazioni per l’uso e Informazioni Utili Blackjack Schlachtplan Tabellen Höhere Gewinnchancen auch verbunden? Understanding Cabergoline Cycles in Sports Pharmacology Mýty o hazardu Pravda za klamnými představami Steroidi e il Loro Utilizzo per Migliorare la Coordinazione e la Precisione nello Sport: Una Guida per gli Atleti Understanding responsible gaming Essential tips for players Navigating the realm of responsible gaming a guide to safe gambling practices Ongelooflijke ervaringen van high rollers in casino's Advancements in Casino Games: The Psychology of Betting and Its Impact on Player Decisions Mien borne conviviale ayant trait aux champions cassants et qualifies Die Ausschuttung auf das personliche BTC-Konto lauft ident ab Bei der oberen rechten Keilformiges stuck konnte gentleman Buttons je nachfolgende Registrierung & Anmeldung aufstobern Wie trifft man auf das serioses Spielsaal uber Freispielen blo? Einzahlung? Eres ist unubersehbar, so sehr Kreuzfahrtschiffe pro Glucksspieler durch die bank attraktiver sie sind Einbehalten Eltern manche von 6 bis 10, ist das ein Unentschieden Unsereins frohlocken mir immens, wirklich so Diese Ihre Phase im Silver Vip Spielsaal gefallen finden an Ebendiese proaktive Variation geschult unser langfristige Marktposition, indes operative Kostenaufwand laut 4 % ausruhen Novice Kasino � Bestes Spielcasino in hinblick auf Namen unter anderem Beliebtheit Rookie Spielcasino � Bestes Spielbank zum thema Reputation weiters Popularitat Freispiele frei Einzahlung seien die der haufigsten Arten bei Spielcasino-Boni in Brd Cultural connections The hidden significance of gambling in society Exploring the impact of technology on the casino experience Las mejores ofertas de bonos en casinos Bitcoin de Perú Unlocking the Power of 5D 777 A Guide to Manifestation and Spiritual Awakening Jugar responsablemente claves para disfrutar sin riesgo en el juego Discover the Excitement of Online Gaming at Chipstars Casino Pharaohs cool buck Casino de ranura Gold 2 Máquina Tragamonedas Regalado en línea Soluciona de divertirte Novomatic Los tragaperras sobre jimi hendrix giros gratis 150 Play’n Go de balde sin liberar Casinos con manga larga excelentes tragaperras golden tiger máquinas tragamonedas de 2026 Soluciona por recursos conveniente Exploring BC.Game The Ultimate Online Gaming Platform Mastering the Game Effective Live Baccarat Strategies and Tips Bedste Skrill Casinoer Find Dine Favoritter 741004566 Anastrozol Acetato en el Culturismo: Usos, Beneficios y Consideraciones История и развитие Aviator Opdag Verdenen af Svenske Online Casinoer Exploring Casino Casper Bets A Comprehensive Guide Moglich Kasino exklusive Maklercourtage: Samtliche Traktandum Casinos ohne Provision Wann konnte male Spielsalon Cuma-cuma Spins blo? Einzahlung beziehen? Primobolan : Choix des Culturistes en Préparation Diese erfolgreichsten Bitcoin Bestes Angeschlossen -Casino, unser ecopayz akzeptiert weiters Crypto Casinos 2025 Spielsalon Wissender The Ultimate Guide to Bonus Details in Online Betting 55 Frische Freispiele Im Feschen Fresh Casino Provision! Whales Pearl play 3d slots Deluxe Slot Demo & Remark Unser besten Echtgeld Verbunden Casinos within Land der dichter temple of treasure megaways Spielautomat und denker Tagesordnungspunkt NV clash of queens Casino Casinos 2026: Echte Erfahrungen und sichere Starts Raging Rhino Ports, Online netent gaming online slots casinos & 100 percent free Trial Games Video game 10 free spins no deposit 2026 Look Lookup the Library from Game titles The Hollistic Aproach To Gravira casino login free play Home