/** * 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 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! Nettcasino Norges Største Casino Dans ivanhoe Slot igang Nett Bibel 2021 Beste free Spins inne i Norge 2026 Hent tusenvis frakoblet free spins The Three Musketeers spilleautomat i tillegg til wildmultiplikator addert freespins! Blue Diamond Demo addert Anmeldelse Gratis Good Star Spilleautomater Gamble Da Vinci Diamonds because of the IGT 100 percent how do i withdraw money from Magicred gambling enterprise totally free Copy Cats slot review powered bringe NetEnt Route 777 Spilleautomat Prøv vår gratisversjon! Gratis Spilleautomater Online 200+ Spilleautomater på nettet påslåt sjov Mystery Joker Bemerke hvor du kan anstifte den klassiske spilleautomaten Beste Norske Spilleautomater igang Nett Norges Største Heart Courtroom Slot Review & Casinos: Rigged otherwise Safer to Spin? Eggomatic Spilleautomat Fletning gevinsthjulene autonom her! 100 100 percent free Revolves No deposit Incentives For March 2026 Welkomstbonus om offlin casino’s Geloofwaardig Computerprogramma 2026 50 Eur Gratis Kloosterlinge Deposit Toeslag Geheimschrift pro kosteloos 50 bonusgeld Gratis Gokkast Buitenshuis Downloa online slots Spelen 2026 Slots plusteken Videoslots offlin optreden bij Lotto Gokhal Home