/** * 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 Most readily useful Slots & Bonuses Betway Sign-up Bring Uk Free Spins & Codes 2026 White & Ask yourself Ports Enjoy 100 percent free Demonstrations Betfred Local casino Opinion and you can Added bonus Bring 2026 MOFCOM Spokespersons Remarks to your Adding Three You S. Companies toward Unreliable Organization Listing Online-Slot Vergleich: Pass away a hundred+ besten Spielautomaten Best Films Slots Online 2026 Top Video slot Gambling enterprises Play Online slots games in the 32Red The best Online slots regarding the British Most useful Slots Aunt Internet sites Path Neighborhood Church Finest Online casinos the real deal Currency 2026 Play the best British on the internet slot game from the Amazon Slots Goldrush On-line casino Southern area Africa A real income Slots Real time Drogenhandler Spiele haben inside diesseitigen letzten Jahren forsch in der Popularitat zugelegt Home Finest Online slots & Local casino Bonuses Beginner's Guide to Understanding the World of Gambling 15 Lessons About casino ardente recensioni You Need To Learn To Succeed Yet Im ach skeptical about this one spielcasino Inoffizieller mitarbeiter Gold Prominenter Beschmu hinter versiert ist und bleibt recht unwahrscheinlich Freispiele scheinen unter Verifizierung oder seien 23 Periode perfekt Winnerz Spielcasino qua 55 Freispielen z. hd. Guide concerning Dead ermoglicht den hochsten Spielwert Mastering financial management in the gambling world strategies for success Technologie und ihr Einfluss auf das moderne Kasinoerlebnis Follow this one streamlined path when codes go reside, and you will definitely never shortage a gifts: Diese Vor- unter anderem Mankos wa 4� Spielbank Pramie exklusive Einzahlung Welches man sagt, sie seien selbige Pluspunkte bei 20 Euroletten Bonus ohne Einzahlung ? Beginner's guide to understanding casino games and winning strategies Újabb Szenzációval Érkezik a Chicken Road 2 Online Játék Magyarhonba. Explore the Excitement of Ricardo’s Casino The Exciting World of Trino Casino & Sportsbook Dépassez les limites du jeu de poulet casino en France Découvrez le Jeu de Poulet Argent 2, un Excitement Sans Fin en Ligne Steroidi anabolizzanti nello sport professionistico: realtà o mito? Winning strategies for gambling success in competitive environments BettingHub Your Ultimate Guide to Smart Betting 337757191 Betting Sider med Gratis Bonus – Gør Dine Spil Mere Spændende Kosteloos Spins Zonder Storting Candy Bars slot Holland 2026 » 1000+ Fre Spins Exploring Slots Muse Casino & Sportsbook A Gamer’s Paradise Combinación de Esteroides con Otros Suplementos: Consideraciones Importantes Cenforce Kurs: Effektive Lösungen für Erektionsstörungen Bedste Online Casino Uden ROFUS – Find Dit Favorit Casino 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 Land over liefste offlin casino’s betreffende het Vegas Hot 81 slot Noppes spins-premie afwisselend 2026