/** * 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 Greatest $5 Deposit Gambling enterprises Canada July casino Lucky Win no deposit bonus 2026: Better Reduced Put Internet sites What Pages Constantly Prioritise into the a casino Listed below are more most readily useful casinos on the internet considering brand new conditions: 4 Best $5 Put Online casino Optibet Lv bonus codes 2024 casinos: Greatest Lower Minimum Casinos Finest $1 Minimal Put Gambling enterprises: Deposit step one$ Rating Mr Mobi 25 free spins no deposit required Free Spins The quality of these add gambling establishment for the order to gambling enterprise $ Buck iWinFortune login Ireland Sign Instead of harbors otherwise roulette, where money will be inconsistent, black-jack has the benefit of steady output that have a comparatively lower publicity The way i Comment and Opinions Gambling establishment Incentive Also provides The best Spend From the Mobile phone Gambling enterprises starscape casino In the united kingdom Our Picks inside the 2026 Here are a whole lot more greatest online casinos predicated into criteria: four At your workplace our company is motivated to put together you’ll the newest offers getting implemented Selecting the most appropriate Casino Site for you The grade of such feature casino to help you help you gambling enterprise Selecting the right Gambling enterprise Website to you personally Top The new Gambling enterprise Web sites in the united kingdom – Put within the 2025! The interest rate away from purchases was determined by someone issues There are certain sophisticated new gambling enterprise internet you to definitely see upwards in the united kingdom to help your an extremely appealing locations Thunderstruck Position Review and you can bc casino Totally free Demonstration 96 ten% RTP The reason why you Are Believe The newest Casino Reviews Thunderstruck Crazy Super Position Review 2026 RTP 96 step 1% Techniques for Finding the right Greeting Incentive There are a number of expert the new casino other sites that open right up in the uk to help you a highly welcoming market How exactly we Review The big British Casino Internet Approaches for Discovering the right Anticipate Incentive The field of local casino pleasure around australia isn’t far far more interesting There are a number of cutting-edge the casino websites one to unlock upwards in britain to help you a great very appealing business At your workplace the audience is motivated to make you is also the offers to be followed Donald Trump is a screwing unlawful scotty81 Local casino web sites has a windows so you can fulfil wagering conditions The reason why you Usually Believe All of our Gambling enterprise Ratings Finest Crypto Gambling establishment casino royal win slot No deposit Bonus Rules July 2026 High Spin Local casino � Better Sign-Upwards Added bonus Ebendiese Casino Verzeichnis für IGT liest sich genau so wie die Better of Register Donald Trump is actually a screwing unlawful scotty81 Donald Trump is simply a fucking criminal scotty81 Better On the web Pokies around Narcos casino australia: Finest Real money websites Fur jedes uns spielt wohl nebensachlich selbige Reliabilitat das Ethereum-Casinos die eine verschiedenen Part Larger Spin Gambling enterprise � Ideal Code-Upwards Added bonus Crazy El Torero Rtp slot machine 2014 movie Wikipedia Claim Your $25 lucky 88 slot online 100 percent free No deposit Incentive Password at the Ports Kingdom ?????? Verde Spielsalon: Sie werden kein besseres gangbar-Spielbank finden denn jenes! Listed below are significantly more most readily useful casinos on the internet provided all of all of our standards: cuatro Tricks for Locating the best Enjoy Extra Unplanma?ig auftreiben sie aufwärts Paysafecard nachfolgende zusatzliche Gelegenheit, ihr eigenes My Paysafecard Bankverbindung in schaffen Online Harbors Enjoy Brand-new Gaminator Harbors on the casino E login internet Gambling enterprise websites features a window to fulfil gaming requirements Book of Oz Slott Microgaming Recension Pröva Fria Demo Parti Approaches for Discovering the right Anticipate Incentive Ultimat utländska casino 2025 Skattefria vinster and snabba uttag