/** * 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年6月までに探した最高の入金不要ローカルカジノ特典 Vortragen Sweet Bonanza® Videoslot von Cash Splash Online -Casinos Pragmatic Play The best On the web Pokies Australian continent 2026 Finest Pokie Web sites Rated Echtgeld Casinos Alpenrepublik Julei 2026: Spielen Sie Casino mit skrill Gewiss Vortragen Spilaðu ókeypis netleiki Eye of Horus machance Kontakt in Schweiz 50 Freispiele bloß Einzahlung Originell Eye of Horus, Kostenlose Demonstration & qua Echtgeld dragon kingdom Online -Slot vortragen Get the best On the web Pokies around australia 2026 Najlepsze Kasyna na Prawdziwe Pieniądze w polsce 2026 Obsiegen Diese Piepen via bugs n bees $ 1 Kaution diesem Eye of Horus Provision The Art and Philosophy of Tiki-Taka Football’s Elegant Dance Ranking Najlepszych Kasyn Online Echtgeld Casinos Ostmark Juli 2026: Auf jeden fall Santas Wild Ride kostenlose Spins 150 Aufführen Erreichbar Casinos via Ethereum ETH Schlichtweg & Auf jeden fall Einzahlen Znajdź najlepsze kasyna online z MuchBetter w 2026 roku! Die Sugar Smash Slot Free Spins gesamtheit über Netzteile Real money Enjoyable Starts Now for Australian continent With Winomania Local casino Frábær fjögur ráð fyrir fjárhættuspil, prufa 5 pund 100 prósent ókeypis, engin hvatning fyrir innborgun Mostbet Casino PL⭐️Oficjalna serwis w polsce⭐️2000zł 250 FS Beste Crypto Slot cluedo unter anderem Bitcoin Casinos unter einsatz von niedriger Mindesteinzahlung Starburst angeschlossen vortragen: Für Eagles Wings Mobile Slot nüsse, Free Spins & Echtgeld Kasyno w Monte-Carlo Monako, zwiedzanie, ciekawostki, wejściówki wakacje na Lazurowym Wybrzeżu £5 innlegg í spilavíti goldbet bónus í Bretlandi. Settu 5 inn. Fáðu hvata snúninga. Engin veðkröfur. Ramses Guide Position Games Demo Enjoy and Totally free Spins Monte Carlo i najsłynniejsze kasyno świata Co zobaczyć? Flott og góð fersk ávaxtastaða! Njóttu á netinu Kynningarkóðar goldbet án endurgjalds! 70 MR BET NO BONUS CODES 2026 Freispiele bloß Einzahlung in Raging Rhino Video slot Wager 100 percent free and no Deposit Quickspin in addition to starts offering variable payout percent 10 casino deutschland Ecu Provision ohne Einzahlung Kasino 2026: Originell inoffizieller mitarbeiter Juli Beste Angeschlossen Slots Brd 2026: Via Freispielen & Bonus Spinarium Gambling enterprise No-deposit Bonus Codes Free of charge Revolves 2026 1500 Willkommensbonus Pick-me personally cycles enable it to be professionals to choose undetectable prizes, incorporating an entertaining element. Totally free spins give additional possibilities to winnings instead of a lot more bets. 100 percent free slots that have incentive cycles offer totally free spins, multipliers, and choose-me personally game. Löwen Play Erreichbar Spielbank Maklercourtage abzüglich Einzahlung 2026 Tagesordnungspunkt-Liste Mr Bet Casino Offizielle S. für Gamer as part of Land der dichter und denker Queen Of the Nile Totally free Position Gamble Demonstration RTP: 94 88percent Beste Angeschlossen Casinos Deutschland: Tagesordnungspunkt Casino Seiten 2026 Absolute Precious metal Demo Enjoy Totally free Harbors at the Great com Beste PayPal Erreichbar Casinos 2026: inoffizieller mitarbeiter Kasino via PayPal saldieren 50 Freispiele ohne Einzahlung sofortig zugänglich 2026 Gebührenfrei Spins Lucky Days Einzahlen: Schnelle Einzahlung & Ausschüttung The brand new image was eye-popping, therefore the gameplay are enjoyable Beste Online Casinos Teutonia Juli 2026 Finest Party Will pay Pokies Australia 2026 Grid Slots the real deal Currency Talk about totally free greeting extra no-deposit necessary a real income also offers at the Restaurant Gambling enterprise A deck offering 6 steps in the place of a good a dozen-strategy standard score fifty% Discover the Thrills of Casino Beonbet Bis zu 1 000 Willkommensbonus bewachen On Yay Gambling enterprise, we have generated seeing public casino games very simple- because playing should be fun, maybe not complicated!