/** * 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 Plongée dans l’efficacité des substances en natation L’oxandrolone pour optimiser votre performance sportive Află cum să joci la Betsolid Casino Online: ghid pentru începători și opțiuni de Twin Casino Η Νέα Εμπειρία στον Κόσμο των Καζίνο Discover the Thrills of Casinoways Casino Your Ultimate Gaming Destination -74997839 Optimisez vos performances avec Tren E 200 Musculation Chicken Road Ice Slot Ein kaltes Abenteuer mit spannenden Gewinnen Luckily, we have chose the fresh new ten unmissable headings, which you yourself can try at most All of us slot internet sites The fresh new respect program is actually greatly improved and you may comes with totally free South carolina revolves once you top up Les Bienfaits de Stenbolone pour les Passionnés de Musculation 1xBet Ethiopia Your Ultimate Guide to Online Betting -152838151 Finasteride et Performance Athlétique Start with researching and seeking a reputable gambling enterprise that gives zero put bonuses inside the Southern area Africa Therefore, this permits members to return and you will continue steadily to appreciate high local casino video game risk-free Right here, it is all regarding where you might get the strongest go back regarding the video game on their own Discover the Excitement of Love Casino 4 Online Casino Twister Wins Casino Online Games Thrilling Opportunities Await! Pagamentos rápidos e seguros: a experiência do Viks Casino SportBetOne: jakie bonusy przyciągają graczy w 2026 roku? Comprehensive Guide to Cabaser for Movement Disorder Management Understanding Tren A 100: A Key Player in Your Cycle The Role of Testosterone Supplements in Modern Strength Sports AlienBet Casino en veilige gaming: hoe jouw gegevens beschermd blijven Payout veloci su Spinaro Casino: tutto ciò che devi sapere sui metodi di pagamento Pistolo Casino Η Κορυφαία Εμπειρία Τζόγου Σε Διαδικτυακά Καζίνο X7 Casino España: descubre los mejores bonos y promociones en 2026 Valaciclovir Dosierung: Wichtige Informationen für Patienten CasinoRex live casino experience: fast payouts and exciting top games await Wie Gebe Meine wenigkeit Quellen Bloß Schriftsteller Im Literaturverzeichnis Angeschaltet? 1001 Spiele Jewel Schachtel Zum besten geben Jewels Quest Finest On-line casino Incentives and you can Offers 2026 Better Apple Shell out Gambling enterprises 2026 Create Secure Fruit Pay Deposits & Distributions £1 Deposit Casinos: Explore a minimal Deposit in the united kingdom Tomb Raider slotimäng: Mängi veebis tasuta ilma installimiseta Microgamingult 100 protsenti tasuta keerutusi ilma sissemakseta kohalikus veebikasiino 200 pööret värskest. Pakkumised kehtivad ka aprillis 2022. The overall playing sense towards system are going to be smooth to the machines, smartphones, and pills Watch pony races, enjoy within casino, and luxuriate in an overnight remain at this Arkansas lodge Täielik Ühendkuningriigi komplekt 100% tasuta keerutusi kaardiliikmelisusele Casinos on the internet one to play on smartphones as well as hand out zero deposit incentives on the members Even though design slowed down, the project was still likely to open promptly No-put incentives are typically provided by the new casinos or current casinos sporadically all year round Der Oxymetholon Injektion Kurs: Alles, was Sie wissen müssen Miksi valita WeezyBet livekasino: rehellinen arvio ja pelaajien kokemukset Running Wealth Gambling establishment proved to have a good bonus program while in the my evaluation Rescue my title, email, and you will website in this web browser for the next big date We comment Void in which blocked by-law (California, CT, ID, La, MI, MT, NV, New york, New jersey, WA) For every single also provides another number of regulations and you may gameplay feel, providing to various choices Toppspel att testa på Wild Jackpots Casino: slots och bordsspel för varje spelare Spela live på SlotyStake: Få ut det mesta av din casinoupplevelse Wsm Casino België: ontdek de voordelen van live casino met 24/7 ondersteuning