/** * 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 Kasyno na Prawdziwe Pieniądze Przewodnik KNP 2026 100 完全フリースピン デポジットなし 2026 登録で 100 FS を獲得 PayPal Spielsaal Deutschland ️ Beste Online Casinos über PayPal Einzahlung Liste 2026 Offizielle egyptian dreams Slot Inter auftritt Kasyno Online na Prawdziwe Pieniądze 2026 Najlepsze Opcje IGT Slots Gamble IGT Slots On line at no cost Wypłacalne Kasyna Wideo 2026 Top Ranking Beste Online Casinos 2026 inside Brd » Hierbei spielst respons dem recht entsprechend ミシガン州にある標準的なゲーム コミュニティを詳しく調べます over Deutsch-Übersetzung Hyperlink Langenscheidt Engl.-Deutsche sprache Verzeichnis 88 Luck Slot machine game: Play Free Slot Game by the Bally: No Install 地元のカジノ グランド ベイ デポジットなし 10 完全無料 リボルブ 2026 年夏 Beste rainbow riches Slot Free Spins Schreibung, Synonyme, Beispiele Unser kostenlose Angeschlossen Spielbank » Letter zum besten geben! Keno Opportunity とペイアウトマップ、そして 2026 年の予約が可能 two hundred No-deposit Bonus, two hundred Totally free Revolves A real income 2026 Bonsospil DK – Det officielle site for online spil Top 10 Erreichbar Live Casinos qua Live Pusher Zum besten geben Casinohousespil DK – Det officielle site for casinooplevelser Erstplatzierter Reel Gems Slot Free Spins Angeschlossen Kasino Maklercourtage inoffizieller mitarbeiter Julei im Abmachung Casino Apps im Erprobung 2026: Nachfolgende The Smart Rabbit $ 1 Kaution besten 8 je Android & iOS 100%無料のスロット 完全無料のオンラインカジノゲーム Neue Online Casinos 2026 seriöse Newcomer inoffizieller mitarbeiter Test Casumo Casino: RTP 95-97% Casino boo Kein Einzahlungsbonus Slots & Echtgeld das rennen machen Casinoandfriendsdk DK – Det officielle 177595359 Live Casinos 2026 Beste Ernährer via echten Online Casino Live blackjack Live Dealern Najlepsze Kasyna Online w polsce 2026 Polskie Kasyna Online Tagesordnungspunkt 10 Angeschlossen Live Casinos qua Live Drogenhändler Zum besten geben Expektdanmark DK – Det officielle 169188921 Expert-Tested: Vollständigen Artikel lesen Beste Online Spielsaal Helvetische republik 2026 イングランドとコンゴ民主共和国の比較 ⟪ 数学的予測 ⟫ 統計、ラインナップ、オッズ 2026年7月1日 Ariana Harbors Wager Online with no Downloads Brucebetdk DK – Det officielle 179851031 12 000+ Kasino Spiele gebührenfrei zum besten geben Exklusive Eintragung Brucebetdk DK – Det officielle Lær Mere Om Spil, Bonusser og Ansvarligt Spil Cashapillar Totally free Slot machine Roulette vortragen columbus deluxe Online -Slot -Bewertung gebührenfrei, Hierbei 100% gratis vortragen! Bwindanmark DK – Det officielle site for spil og væddemål Die besten Spielbank Provision Codes 2026 Neue Boni unter anderem Promos Die besten online casino 30 euro bonus ohne einzahlung Paysafecard Erreichbar Casinos je 2026 Spielsaal Seher 権威あるフィッシュウィキ Casinohousespil DK – Det officielle site for online casino Play Desert Appreciate Slot Demo from the NetGame RTP: 97 05percent Verdiene lucky 8 line Slot Free Spins echtes Bimbes unter einsatz von dem Abschmecken durch Spielen, Apps unter anderem Produkten Online Spielbank Test 2026: Beste Casinos in Deutschland Beste Casino silent run Angeschlossen Casinos within Teutonia » Top 10 Casinos 2026 Ozwin Gambling 事業期間中の 50 ドルのブラック マンデー プロセッサ チップ Online las vegas slots 777 On line slots Book of Ra Demo Zum besten geben & Kasino Maklercourtage ️ 2026 Freispiele bloß Einzahlung 2026 Die besten Free Spins Angebote