/** * 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; } } news – tejas-apartment.teson.xyz

news

How Behavioural Biometrics Strengthens Casino Account Security in 2026

How Behavioural Biometrics Strengthens Casino Account Security in 2026 Casino account security has evolved beyond passwords and two-factor codes. In 2026, behavioural biometrics represent the frontier of player protection, monitoring how you interact with your account rather than just verifying who you are. This technology detects fraudulent access patterns in real-time, ensuring your funds and […]

How Behavioural Biometrics Strengthens Casino Account Security in 2026 Read More »

Comment les applications agréées par l’ANJ aident les joueurs en difficulté

Comment les applications agréées par l’ANJ aident les joueurs en difficulté Les applications de jeu responsable recommandées par l’Autorité Nationale des Jeux (ANJ) transforment l’expérience des joueurs en quête d’aide et de contrôle. Ces plateformes offrent bien plus que des jeux : elles fournissent des outils concrets, des ressources de soutien et une protection personnalisée.

Comment les applications agréées par l’ANJ aident les joueurs en difficulté Read More »

Chatbots Thérapeutiques et Jeu Problématique : Un Complément Efficace aux Traitements Traditionnels en 2026

Chatbots Thérapeutiques et Jeu Problématique : Un Complément Efficace aux Traitements Traditionnels en 2026 Le jeu problématique affecte des millions de personnes en France et partout dans le monde. Nous savons que les thérapies traditionnelles restent essentielles, mais elles ont leurs limites : coûts élevés, listes d’attente interminables, et disponibilité insuffisante. Les chatbots thérapeutiques émergent

Chatbots Thérapeutiques et Jeu Problématique : Un Complément Efficace aux Traitements Traditionnels en 2026 Read More »

Aider un Proche Accro au Jeu : Guide Pratique pour les Familles en 2026

Aider un Proche Accro au Jeu : Guide Pratique pour les Familles en 2026 Face à l’addiction au jeu d’un proche, nous sommes souvent désorientés. Comment aider sans devenir complice ? Comment soutenir sans financer le problème ? Ce guide pratique vous offre des stratégies concrètes pour accompagner votre famille vers une situation plus saine,

Aider un Proche Accro au Jeu : Guide Pratique pour les Familles en 2026 Read More »

Comparing casino promotions might seem straightforward on the surface, but the devil’s in the details. We’ve all seen the flashy banners promising “1000% bonuses” or “unlimited free spins,” yet when we dig deeper, the reality looks quite different. The truth is, what matters isn’t the size of the offer, it’s what we can actually do

Read More »

VIP Programmes On International Platforms

VIP Programmes On International Platforms VIP programmes on international gambling platforms have transformed how we experience online gaming. Whether you’re a casual player or someone who bets regularly, these loyalty schemes offer tangible rewards that go far beyond standard welcome bonuses. We’ve seen firsthand how the right VIP programme can enhance your gaming journey with

VIP Programmes On International Platforms Read More »

How To Compare Available Promotions

How To Compare Available Promotions When we browse online casinos, promotional offers flood our screens, welcome bonuses, free spins, cashback deals, loyalty rewards. But here’s the catch: not all promotions are created equal. A flashy 500% bonus might come with impossible wagering requirements, while a modest 50% offer could genuinely boost our bankroll. As experienced

How To Compare Available Promotions Read More »

Customer Feedback Integration: Building Better Casino Experiences

Customer Feedback Integration: Building Better Casino Experiences When’s the last time an online casino actually listened to what you wanted? Most UK players have experiences with operators who seem disconnected from their player base, slow loading times, confusing bonus terms, or games that feel out of touch with what makes gambling entertaining. The truth is,

Customer Feedback Integration: Building Better Casino Experiences Read More »