/** * 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 Combinación de Esteroides con Otros Suplementos: Consideraciones Importantes Cenforce Kurs: Effektive Lösungen für Erektionsstörungen Explore the Excitement of Ricardo’s Casino Bedste Online Casino Uden ROFUS – Find Dit Favorit Casino Steroidi anabolizzanti nello sport professionistico: realtà o mito? Where Should i Select Legitimately Signed up Online casinos Recognizing Filipino Professionals in the 2026? Security Directory regarding Midnight Casino � Would it be fair and secure? Built during the 2006, 188 Wager ends up an over-all all-round sportsbook, with a cashier that covers popular purses as well as Neteller Memo Gambling establishment embraces members along side Uk to relax and play the latest greatest on line playing destination Schritt-fur-Schritt-Betriebsanleitung � Auf diese weise aktiviert ihr den 250% Pramie inoffizieller mitarbeiter Kasino Haufig gestellte fragen Nach Freispielen Hinein Moglich Casinos: Gangland Google android Spielcasino ‘ne ihr zwei einzahlungsfreien Aktionen des Casinos war der Startguthaben hinein Glanzpunkt von 29 Euronen 15 Euronen Pramie ohne Einzahlung Casino � nachfolgende erfolgreichsten Versorger Real time Drogenhandler Spiele haben inside diesseitigen letzten Jahren forsch in der Popularitat zugelegt Selbige einzigen wirklichen Pluspunkte sind die gro?e Selektion angeschaltet Slot-Anbietern & diese schnipsen Auszahlungen Unter allen umstanden ist es immer reizend, sowie es sich damit ein tunlichst gro?zugiges Bonusangebot handelt His/her participant after Germany ended up being looking forward to a withdrawal towards little than a couple of times On-line casino Ports Greatest Pokies Programs 2025 A real income and you can 100 percent free Cellular Pokies Programs Zakaj libido pade po ciklusu? Goldfish Gambling enterprise Harbors: Free Ports Online casino games Rating 20M 100 percent free Coins Médicaments pour la Plongée et Pharmacologie Sportive How to Minimise Side Effects During Bulking Phases 1xBet iOS en Argentina La Mejor Experiencia de Apuestas Móviles Indian Nostradamus $5 put Dreaming Status Immortal Relationship 2 Slot Review: A component Occupied Games having 15,000x Max Winnings House out of Enjoyable Casino slot games Servers: All you need to Know Microgaming Launches The brand new Sensuous while the Hades Position 63 Inclusive Vacation Greetings so you can Celebrate the year inside 2023 Log Understanding Testosterone Cypionate Course for Athletes Understanding Stanozolol Depot Dosage Titanic gate777 log on The new Zealand 1997 <h1>Test Post for WordPress</h1> <h1>Test Post for WordPress</h1> <h1>Test Post for WordPress</h1> De Invloed van HGH op Vetverbranding en Spiergroei Betting Uden RoFUS – Din Guide til Online Spil Tout Savoir sur le Testosterone Propionate 100 Après Prise Tb 500 2: Zwei positive Effekte Finest Mobile Gambling Enterprises: A Comprehensive Overview BettingHub Your Ultimate Guide to Sports Betting 873891503 Magic Win Casino Online Games Experience the Thrill of Gaming 100 kr bred casino bonus uten gave i Norge 2026 Free spins uten bidrag Annamme gratisspinn ved registrering Online Casino $1000 50 gratis spinn the wild chase attmed registrering betydningsløs innskudd Welcome Addisjon Greatest No deposit Extra Casinos & Promotions in the All of us for March 2026 Autonom Casino 50 fri fletning golden coast gjennom registrering ett fett innskudd Les hete Fri Formue Guide! Online Casino, Norges Beste Nettcasino & Casino Igang Nett 2026 Spilleautomater Online 2026: Spil Fri Idag! Home