/** * 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 2026年最高のBokuギャンブル企業ウェブサイト Bokuオンラインカジノ Kostnadsfri Free spins Inte me Insättning villig svenska casinon Läka Listan! 5Gringosギャンブル企業に関する意見、プロアスリートのレビュー2026 2026年まで100%無料のスピンを獲得!ニュージーランドのカジノで入金不要の完全無料スピンを手に入れよう 2025年にすぐに支払える最高の15の入金不要フリースピン特典 Casino Online i Sverige 2026年のアメリカで人気の犬種トップ25(事実と写真付き)Hepper Pets Information 故人か生存者かのデモンストレーションで、Higher.com で無料スロットをプレイ Best Riktig Money Online Casinos touche Play in 2026 2026年までにアメリカのプロ選手が参加できる最高のオンラインカジノ10選 2026年版、最高のリアルマネーオンラインカジノ、アメリカ合衆国最高のギャンブルサイト Gratis Casino Online Testa inte me insättning » Sverige【2026】 arcanebet ローカルカジノ コメント エキスパート&アフィリエイトレビュー 2026 Casino tillägg inte me omsättningskrav 2026 Betrakta topplistan より良いオンラインカジノボーナスとオファー2026 Betsafe Casino Remark Awaken では、$1,100,000 の入金と 50 回のフリースピンが提供されます。 エナジーローカルカジノ:最高のボーナスプロモーションに関する2026年のオンラインレビュー Svenska Casino Gällande Nätet 2026 Bästa Nätcasinon Uppräkning Bestu spilavítin með lágmarksútborgun í júlí 2026, innlegg allt niður í $1 Licenser & lov Bestu spilakassar fyrir raunverulega peninga árið 2026. Bestu spilakassasíðurnar á netinu. Ultimat Nätcasino Indverskar Blackjack síður Spilavíti vulkan vegas IS á netinu Bestu spilavítishafnir fyrir raunverulegan vulkan spiele samband á Íslandi gjaldmiðil 2026: Spilavítisleikur á netinu Farsíma spilavíti með 100% ókeypis snúningum og tilboðum án goldbet app 2026 innborgunar til að eiga árið 2026 Prufuáskrift goldbet innskráningar farsíma að Moon Princess spilakassanum, Play'n Go Bestu 150 ókeypis snúningar goldbet innskráningar farsíma án innborgunar í Bandaríkjunum júlí 2026 Bästa Casino Tillägg 2026 Finn Topprankade Casino bonusar Bestu spilavítin með netspilavíti án innborgunar verde casino lifandi miðlara í fjárhættuspilum á netinu árið 2026 Gleðilega 88 Pokie Athugasemd 2026 RTP, verde casino app apk niðurhal Njóttu og miklu meira Casino tillsamman låg insättning 2026 Ultimat sajterna av 10 Bestu farsíma spilavítin bónus án innborgunar spilavíti verde casino og bónusar Bestu Paysafecard spilavítin 2026: Bestu Paysafecard spilavítin Vefsíða vulkan vegas á netinu Best No deposit Bonus Requirements Within the August 2026 Bestu greiðslur frá farsímafjárhættuspilafyrirtækjum 2026 Kröfur um úttekt goldbet Spilavítisvefsíður sem þú getur tekið við farsímainnborgunum Bästa casino tilläg 2026 Jämför svenska casino bonusar Hvítir verde casino spilavíti bónus kapphlauparar – 100% ókeypis prufuáskrift. Njóttu Neosurf vefspilavítin Betri fjárhættuspilafyrirtæki vulkan vegas bónus á Íslandi Þú átt viðskipti við Neosurf Free Revolves No-deposit 2026 : 10+ NZ Totally free Spins Gambling enterprises Free online games Enjoy Now to the Y8 com Steeped Father: Uppgötvaðu leiðir til að fjárfesta og skapa vulkan vegas raunverulega peninga Casino tillsammans free spins » Ultimat gratissnurr inom Sverige Bestu farsímahafnarspilin ókeypis í farsímanum vulkan vegas app niðurhal þínum árið 2026 Sexy and you will hot, Bouncing Jalapenos has arrived to push wilds! Better Free Revolves No deposit Incentives During the Casinos on the internet Within the 2026 Play 5 Dragons Totally free Novel Has & Oriental Theme Mega skjáborðsforrit: Windows, Mac Spilavíti vulkan spiele IS og Linux 10 legjobb online kaszinó valódi pénzzel az USA-ban, 2026. július 100 percent free Slots Enjoy 41,624+ Zero Install Slot Demos Southern Africa Szerencsejáték-vállalat Hősök Bónusz és Vélemény 2026 Regisztráció Biztosítson 100%-ban ingyenes pörgetéseket