/** * 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 فرص الرهان على النرويج ضد إنجلترا: تحليل شامل للأداء والمراهنات Exploring Sports Betting Sites Not on GamStop 1003446812 Idealna Spletna Igralni Etablissement Poravnava Metode: Skupni Vodič Najboljše Igralne podjetja Igrice: Vodič do najbolj Vznemirljivih in Nagrajujočih Igralnih ustanov Iger Bally Local casino � Inserted when you look at the Nj-nj-new jersey and Pennsylvania Exploring the Rise of New Social Casinos A New Era of Online Gaming He’s certain decent names to utilize and therefore complete efficiency for the a conversions and you can sites Explore Non GamStop Online Casinos in the UK for Uninterrupted Gaming The Fascinating World of Professor Wins Unveiling the Thrills of Online Gaming Exploring Non-UK Registered Gambling Sites What You Should Know Gamble Thunderstruck the knockout site by Microgaming at no cost to the Casino Pearls Explore the BC.Game Official Link for Thrilling Crypto Gaming Exploring Non-UK Regulated Casinos Accepting UK Players 1013034531 Ac mymmys gold free spins on sign up dc Thunderstruck Lyrics & Definition Exploring Sports Betting Sites Not on GamStop 1005684062 Bookmakers Not on GamStop A Guide for Enthusiasts Dankgefuhl des hoheren Startkapitals konnen nachfolgende Glucksspieler diese vielfi?a�ltigsten Sportarten elaboriert ausbaldowern weiters etliche auf etwas setzen Denn derzeit werden gar keine Tischspiele wie gleichfalls Toothed wheel, Blackjack weiters Baccarat leistungen Zahlungsmittel Multiwahrungs-Umgebung (Ecu bei Promo- weiters Kassenbeispielen; Krypto genauso verfugbar) Deutsche Glucksspieler fahig sein einander nach diesseitigen exzellenten Support bei AmunRa de aufhoren Popolne spletne ocene igralniških spletnih mest: Vaš pregled do lociranja popolne igre platforme Najboljša Spletna Igralnica Vabilo Bonusne Ponudbe: Obsežen Pregled Welche sollten storungsfrei bildschirminhalt verschieben, geradlinig stobern oder selbige Kategorien klar erkennen konnen Najbolj učinkovita on-line spletna stran za igre: Celovit pregled Als Andere stehen 100 Freispiele bei dem Spielautomaten Volcano RIches zur Wahl Gebrauchen Diese ein langes, eindeutiges Losung und zum eins z bringen Diese dieselbe E-Mail-Schreiben nicht langer denn einmal The Most Effective Online Casino Site: Celovit Guide za Selecting Perfect System Ihr faszinierendes Richtung diverses Casombie Casinos ist und bleibt die schiere Gesamtheit vos angebotenen Spielsortiments Wie zig zusatzliche Deutsche man sagt, sie seien untergeordnet Diese sicher jede menge beschaftigt oder besitzen viel damit nachfolgende Ohren Klassische Fruchtautomaten neben modernen Videoslots mit Bonusfeatures unter anderem hoher Fluktuation Freund und feind direktemang kanns meine wenigkeit euer Bankverbindung qua tausenden Euronen eintragen � ein bissel Glucksgefuhl unanzweifelbar Dein Willkommenspaket bei Casino Joy existiert aufgebraucht drei separaten Bonusangeboten aufwarts deine ersten drei Einzahlungen Casino Sites Not on GamStop Your Guide to Alternatives Gratis Spins på Udenlandske Casinoer Uden Indskud Explore the World of Casinos Not Part of GamStop Exploring Casino Not on GamStop UK A Guide to Non-Restricted Gaming The Connection Between HGH and Youthful Appearance Cómo comenzar a jugar en Funbet Casino: guía para nuevos apostadores en 2026 Jak funguje navratnost vracenych prostredku u hracich automatu v MineBit Casino Beliebte Slots und Live-Optionen im SlotsPalace Casino: Ihr Leitfaden für 2026 Essential Preparations for Competition Success Mayan Princess Beach & Dive Resorts of $212 Coxen Opening Resort Sales & Analysis Big Many Slot Comment Microgaming Totally free Demo & Has Big Hundreds of thousands Slot Totally free Gamble Internet casino Slots Zero Download Miracle Brick Slot from the Gamomat Play for Free Magic: The new Get together Stadium Aries Month-to-month Horoscope: Summer 2026 Web based casinos United states 2026 All of the Real cash Playing Sites Fortunate Twins Slot: Jackpot + RTP Remark Play Slots On the internet the real deal Money United states of america: Top ten Gambling enterprises to have 2026