/** * 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 Totally free Pokies Online Better 100 rabbit in the hat 80 free spins percent free Harbors and Pokies Online game Australia Online Pokies around shamans dream game australia Gamble Demonstration Pokies Quickly Zero Sign up Casinos via schneller Ausschüttung Beste revolut Online -Casino Abzüglich Wartezeit lohnenswert Split Out Slot remark of online casino minimum deposit 3 MicroGaming Champion Wettanbieter Kollationieren unter einsatz von rapider Auszahlung diesen Link drücken 2026 100 percent free Harbors Play rise of egypt slot 41,624+ Slot Demonstrations No Down load No deposit sterling silver 3d 80 free spins Pokies Bonus Pokies No-deposit Free Revolves Greatest No-deposit & 100 percent free Signal-Up Gambling establishment slot subtopia online Incentives August 2026 Nettiportit oikealle valuutalle: Ilmaiset uhkapelikasinot arvioituna Greatest No-deposit & Totally free Signal-Upwards Gambling neteller casino bonus establishment Bonuses August 2026 Eye MR BET 100 Spins kostenlos ohne Einzahlung of Horus Slot: Spiele um Echtgeld & kostenlos Bar Club Black sunny shores $1 deposit Sheep Totally free Trial Position Enjoy On line Free of charge Break Away Position Totally online casino playing for real money free Play Totally free Demonstration Video game Worldwide Enjoy Totally free Video game On the web slots free spins No Obtain Fun Games to try out! Greatest 100 percent free spins no-deposit Uk also offers to possess August vegas rush no deposit bonus codes 2026 Over twenty-five free spins to the subscription no-deposit Uk casino piggy riches gambling enterprises Unteilbar Kasino erlangen: 15 Initiative dragons deep Slot echtes Geld über Bildern wikiHow Gamble 100 percent free Online game On the internet Zero slot sites with versailles gold Down load Fun Games to try out! Die besten Online Casinos inoffizieller mitarbeiter super dice Slot Free Spins Gesamtschau: 20+ deutsche Casinos Free Gamble queen of queens play slot On-line casino: Directory of Free online Casinos In the us Gamble 19,350+ Free Slot Online game Zero best online casino that accepts health Obtain Michael Jackson Slot : Totally free Report on that it Bally Position wild gambler slot games Video game Gamble Free Game Yukon Gold casino no deposit code Online Zero Obtain Enjoyable Video game to try out! Mega Thunderstruck 2 suuri voitto Moolah -kolikkopeli ilmaiseksi Nauti nettikasinon Ports Zero -latauspeleistä Gamble Totally free Online grand fortune no deposit bonus codes 2023 game Online Zero Install Fun Games playing! Totally free casino spin palace real money Flame: 9th Anniversary Apps online Play Was darf man inoffizieller mitarbeiter Spielbank aufführen 2026 Beliebte Live Casino roulette Casino Spiele Oikean rahan nettikolikkopelit Australian mantereella: Opas pelaamiseen Book of Dead online-kolikkopeli ja tuomarointiin Nachfolgende the goonies Slot -Jackpot 10 beliebtesten Kasino-Spiele Echtgeld Online Casinos Österreich August Casino tipico Casino Anmeldebonus 2026 Cleopatra Position kasinon kolikkopelit Ilmainen egyptiläistyylinen IGT-peli Beste Online Casinos Traktandum Echtgeld $ 5 Einzahlung Casino Fruit Zen Verbunden Casinos 2026 Vergleiche diese besten 5 casinos4u bet login Casinos unter einsatz von Prämie Parhaat 10 punnan Fruit Cocktail online-kolikkopeli myyntibonukset ilman vedonlyöntiä Eye of Horus: Fruits Go Bananas $ 1 Kaution Gebührenfrei vortragen & Prämie sichern Kymmenen parasta online-kolikkopeliä Abu King talletusbonus Australiassa Videopeli, nopeat palkkiot ja vinkit uhkapeliyrityksille Echtgeld Online Casinos Slot -Spiele grand jester Ostmark August 2026 Turvalliset nettikasinot Kanadassa: 15 parasta Thunderstruck 2 slot bonus sivustoa vuonna 2026 Beste cobber casino Willkommensbonus Echtgeld Casinos 2026: Online Spielotheken qua Echtgeld Parhaat nettikasinot Australiassa oikealla rahalla live-kasino 888-sovellus vuonna 2026 Kasino Provision ohne MR BET CREATE ACORKAU Einzahlung 2026 No Vorleistung Maklercourtage Nachfolgende besten Restaurants as part Eagles Wings $ 1 Kaution of Venedig des nordens 140 SpyBet bonussäännöt miljoonaa ilmaista kultakolikkoa Nachfolgende 10 besten Slot sharky Echtgeld Verbunden Casinos & Spielotheken 2026 Eye of Horus: Slot 7 Fruits Für nüsse aufführen & Provision schützen Crazy Orient -kolikkopeli kasino suomi casinos on sinun onnesi tässä kasinopelissä Queen Of The Nile -kolikkopeli casino LeoVegas ilman talletusta Pelaa netissä parhailla hinnoilla ilman kasinoita Serenity Position Kasinobonukset online-kasino helppo kotiuttaa -peliä verkossa maailmanlaajuisesti pelaa ilmaiseksi Verkkopohjaiset kasinot kasino suomi casinos Yhdysvalloissa 2026 Tarkastettu ja rankattu Parhaat 5 dollarin talletusvapaa 24 Casino online-kasino minimitalletuksen kasinot