/** * 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 Fans out of casino slot games could play ports online and switch layouts timely Noch verlangt Sevenplay zyklisch Aktionen und Treueprogramme an, ebendiese Spielern alternative Gewinne und Freispiele moglichkeit schaffen Viele Spiele einbringen zudem keine Treuepunkte der, weshalb respons dich im voraus damit erkennen lassen solltest Hommer Son Casino de Poort naar Onvergetelijke Winsten Ontgrendel jouw kans met de totobet slot login ervaring Oppdag magien ved å vinne hos casino thorfortune Unleash Winning Thunder at Thor Fortune CasinoOnline Adventure Ontdek de ongeëvenaarde spanning van palmsbet com en win groot Verlies jezelf in de betoverende wereld van hey online casino Objevte kouzlo štěstí s Thor Fortune CZ a proměňte svůj osud Entfessle dein Glück mit dem thorfortune Bonus und gewinne groß Foxy Gold Casino de sprankelende wereld van goud en avontuur Ontdek de magie van geluk met Get Lucky Nederland Les mystères divins de Thor et les trésors enchâssés Verhoog je winsten met de levensveranderende Livescore Bet bonus Unleash Winning Power at Thorcasino’s Thunderous Realm of Fun Savor the Bold Flavors of Fruity King UK and Reignite Your Taste Adventure Unlock Limitless Fortune with the Billionaire Spin No Deposit Bonus Éclat et plaisirs au casino azur avis révélés Plongée dans l’univers flamboyant de Track Casino Monopoly Big Baller gamdom az ilə sərfəli mərc dünyasında macəra sizi gözləyir Unlock the Playful Power of Emojino to Transform Your Messaging Unlock Limitless Adventures with Betfury Today Free Spins Magic Betonred casino avis révélateur de l’expérience ludique ultime Sorprese scintillanti e vincite straordinarie su Winrolla Casino Slots Pistolo Casino w Polsce odkrywa nowe horyzonty rozrywki La magie du divertissement au cœur de casombie kasino Pariez comme un expert avec Bet Pro pour transformer vos gains Upplev den digitala magin med Emojino online världen Гроза удачи в thundercoins казино Қазақстан ждёт своих победителей Oppdag kraften i bigboost no for uovertrufne resultater Plongée mystique au cœur de l’expérience Casino Amunra FR La magie des retraits d’Arlequin Casino révélée en coulisses Casino Winna Unleashes Hidden Fortunes in an Electrifying Playground Energiával teli lóherevarázs, ami átalakítja Magyarországot Odkryj niezwykłe możliwości 50 Crowns PL i stwórz swój sukces Ανακαλύψτε την αληθινή μαγεία του gaming με το winrolla Unlock Hidden Treasures of Casino Dove Slots’ Enigmatic Sister Siter Aventura e Luxo em Weiss Casino Portugal A Experiência que Transforma Elevate Your Fortune with King of the Sky Slot Adventure 50 Crowns NO Opplevelsen som Forvandler Dine Spillkvelder Billionairespin kazino pregled razkriva skrivnosti bogastva Objevte kouzlo hraní na cestách s winrolla casino mobile Epic Face-offs Ignite Thrilling Excitement at Duel Live Casino Unveiling the Enchantment of 50 Crowns NZ for Adventurous Souls Desvende o Universo Surpreendente das Irma▌âs do Betfury Unlock Hidden Treasures with Irresistible Freebet Casino Bonuses Энергию монет в казино преобразите в незабываемые победы Kraliyet Paraları 2 Slot ile Şansın Kapılarını Aralayın WinRolla Casino Suomi tuo pelielämyksen uudelle tasolle