/** * 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 Unter einsatz von uns Latest Globe and National Development and Statements USATODAY com Better £5 No deposit Incentives: United kingdom Casino & Bingo Sites Magic Stars 96 2% RTP gratis spielen Demonstration Slot ohne Eintragung Top Gambling enterprise Playing Book to have 29+ Ages Lowest Deposit Web based casinos To have United kingdom Participants Beste Online Casinos 2026 Legale Casinos je Brd Dream Las vegas Local casino Most recent Gambling enterprise Bonuses Requirements and Free Revolves Minimum Put Web based casinos To possess Uk People Spielautomat Magic Stars Vortragen Slots Eltern um echtes Piepen inoffizieller mitarbeiter Slotier Spielbank Top Internet casino Real money Websites in the usa to have 2026 Magic Money Slotmaschine Novomatic Slot Spiele kostenlos Finn as well as the Swirly Twist Position Play 96 62% RTP, three hundred xBet Maximum Win Disney Magic Kingdoms Fairies Tree Opinion Magic Fruits 4: Das Slot, ihr angewandten Klassiker wiederbelebt Gambling enterprise Wikipedia Euro Wikipedia Euro Castle 2026: Personal $600 Welcome Package & Super Profits Traktandum Lucky Pharao Echtgeld Spielsaal step 3,100000 Acceptance Bundle, 350 Free Spins Subscribed Gaming Online slots Gamble position games inside Uk from the PlayOJO Lucky Pharaoh Merkur Gratis spielen ohne Anmeldung Drive: Multiplier Havoc Position Play for 100 percent free otherwise with Incentive Evolution Lucky Unicorn Slot online spielen Lucky Monarchin für nüsse aufführen abzüglich Registrierung Gratis Protestation Slot Finest No deposit Casinos Free A real income Sign up Bonuses DOLPHIN PEARL Tanker Aframax LR dos Angeschlossen Slot via Power Spins Expensive diamonds Totally free online game install BoVegas Casino : 400percent Fits Added bonus around cuatro,one hundred thousand Angeschlossen Slot via Power Spins 21 Kasino Maklercourtage Quelltext August 2026, Kupon Codes Greatest Maestro Gambling enterprises in the us: Best Maestro Gambling establishment Sites 2026 $5 Minimal Put Casinos Our very own 5USD Online casino Toplist Angeschlossen Aufführen & Echtgeld das rennen machen Suits Deposit Incentives â Top 10 Put Incentives two hundred% 2026 BitStarz Added bonus Code 2026 100 100 percent free Revolves No deposit, six BTC Gambling establishment Put & Fee Steps Effortless Gambling establishment Deposits Pay by Mobile phone Gambling enterprises within the Canada 2026 Cellular Deposit Sites Better Spend From the Mobile phone Gambling enterprises United kingdom 2026 Fonix & Mobile Charging you Lucky Lady’s Charm Automaten-Demo Kostenlos Aufführen Hollywoodbets 15percent Deposit Bonus Book Durban July 2026 Best No deposit Immediate Detachment Cash Software Casinos in the usa Lucky Bird Spielsaal Erfahrungen Lucky Bird Online Casino & Bonus 2026 No deposit Added bonus Requirements The brand new Real money Gambling enterprise Added bonus Password Fahrräder Markenräder & Leistungsumfang dienlich besorgen Finest £ten Deposit Gambling enterprises Uk 2026 Score Incentives That have £10 Aztec Gold Video slot Gamble 100 percent free ports Angeschlossen Vortragen & Echtgeld erlangen