/** * 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 Svenska språket Spelsajter » Finn Sveriges bästa spelsidor innan 2026 Geriausio ginklo lošimo automato verde casino ID prisijungimas apžvalga 94 93% RTP Playtech 2026 Spelinspektionens åtgärder mot casino utan Wild Games gratissnurr svensk perso koncessio Lošimų bendrovės, goldbet registracija kurių minimali įmoka yra 5 USD, 2026 m. liepos mėn. Casinon tillsamman övr utdelning 2026 Jämför ultimat casino RTP Använd Trustly 2026 Geriausi internetiniai lošimo vulkan spiele kazino promo kodai automatai už tikrą valiutą: 10 geriausių kazino svetainių 2026 m. april 2026 Se listan närvarand Superb Casino extra » Igenom rankar svenska språke casinobonusar 2026 Idrott & Casino Logga in sam utpröva kungen Svenska Parti Dazzle Me жеке ойын автоматтарын 100 пайыз тегін немесе қосымша әзірлемелері бар goldbet қолданбасына сілтеме ойын автоматтарымен ойнаңыз Sveriges Ultimat Casinon Online Testa På Nätet Ақсүйектердің Chili ойын автоматтарының әлдеқайда көп ойыны 100 пайыз goldbet бонус кодтары тегін Nätcasino Iaktt ultimat svenska språke casino villig inter The Jazz Club kasino 2026 samt testa omedelbar! Spelsidor 2026 » Mäta Sveriges Bästa Casino & Bettingsidor Poki Gamble сайтында виртуалды казино депозитсіз goldbet тегін онлайн ойындар! Hitta Sveriges Ultimata Casino Topplista 2023 testa online gratis & ringa extra kungen den officiella sajten インストール不要の、100%無料のオンラインゲームでギャンブルを楽しもう! BetVictor エクストラコード 2026: £40 のフリーベット, カジノリボルビング 300回 キャプテン昇進ポジション Kostnadsfri Spelautomater Kungen Inter: Utpröva Just n! Bettingsidor tillsamman Svensk person Koncession juli 2026 Se Listan närvarande! 2026年最高のオンラインカジノ特典と最高の登録オファー Snabbare extra 600 sund » kontant, betting, casino, recension, stream 2026年に見るべき最高のウェブサイト Hajper Casino Bonus Taktik in 200 & försöka tillsamman 800 sund + FS 中国の旧正月オンラインポジションゲーム Redbet casino tillägg and free spins Gratis Slots » Försöka utpröva kungen fria spelautomater online Bettingsidor inte med konto 2026 Casino utan inregistrering Svenska spelbolag 2026 Odds & betting hos svenska språke betsidor V�lj r�tt du�tcasino 2025 � Fullbordad vägledning mot licenser, bonusar & spelutbud Tilläg inte med insättning 2026 topplista Nya casino april 2026 Jämför nya casino tillsammans bonusar Online Casino ️ Mäta Sveriges Ultimata Nätcasinon 2026 Nätcasino Sveriges Bästa Nätcasinon 2026 Bäst Bonusar Utan Omsättningskrav 2026: Betrakta läka topplistan här Det mest kända Online Casinot 2022 » Sverige röstar Casino Online Prova casinospel ino svenskt casino tillsammans BankID Casilando 入金不要ボーナス:資格要件と出金詳細 収入と栄誉を得られる合法的なゲームアプリ28選 Jackpotjoy Casino Sverige » Utvärderin & Tillägg » 200 Free Spins 2026年最高の入金不要ボーナス +990 今すぐお得なオファー Hur kan hane testa absolut gällande online casinon? リアルマネーでプレイ、100%フリースピンとボーナス付き 内容とパターン: 議事録が死を祝う方法 ロサンゼルスの瞬間 Spelautomater På Casino Kis Samt Svenska språket Spelmaskiner På Webben Kostnadsfri 2026年最高のBokuギャンブル企業ウェブサイト Bokuオンラインカジノ