/** * 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 Internetinis žaidimas Immerion casino prisijungimas mobi „Twist“ 200% Acceptance Added bonus ️ 2026 Get the best The newest 2 hundred% Bonuses twenty-six The newest ultimate super reels slot No deposit Added bonus Codes To have Jul 2026 Current Each day Medzinárodné kasína Dovolenka plná zábavy a napätia Pharaos Wide range Status Bet Totally free and Earn Exhilaration video game play slots and you may casino games the real deal اخبار التطبيقات والتقنية Goldi Homepage Nemokami internetiniai lošimo automatų Ybets registracijos premija žaidimai Better United states Web based essential link casinos 2026 Checked out, Rated & Examined Golden Goddess Slot Remark: Instances Out of Relaxed Spins, Intense Extra Cause, Honest Decision Medzinárodné kasína Svet hier a zábavy -1983099281 Gamble Pharaohs Chance Totally free Review of Pharaohs Fortune Privatūs visiškai nemokami 5 būgnų Ybets programa prievadai iš „Freeslots4u.com“ No deposit Extra Rules The new Real money Local casino Incentive Code Golden Goddess Demonstration Slot Play So it IGT Game free of charge Inovácie a technológie na Techsummite 2023 Better Gambling enterprise Bonuses 2026 Contrast Better Extra casino rainbow riches Offers Trisdešimt penki linksmi ir asmeniniai vaizdo Immerion casino registracijos premija žaidimai žmonėms Cashapillar Slot Online game Remark ️ Pharaoh’s Chance Slot Enjoy Pharaoh’s Chance Casino slot games On the internet Medzinárodné kasína Svet hier a zábavy Kompletný zoznam online kasín na Slovensku Kasína s minimálnym vkladom Hrajte bez stresu a obmedzení On-line casino Ratings Better Trusted Internet casino play triple dragon Sites 2026 by the Getb8 69gamescz CZ – Oficiální online gaming platforma 69gamescz CZ – Oficiální online -2020354703 Medzinárodné kasína Nové možnosti a trendy v online hazardných hrách Cashapillar Demo Play Position Video game a hundred% Totally free Kasíno online 2026 Budúcnosť hazardu na dosah ruky Gladiator Demo Slots by the Betsoft Comment & Free Play Kasína s minimálnym vkladom Vstúpte do sveta online hier bez vysokých investícií Totally free Slots Online Enjoy Las vegas Slot machine enjoyment Play Free Golden Goddess IGT Position +Information & Pokies Publication Simply click on the tab branded ‘Start/Capture Victory’ once you’re also willing to spin this type of cool reels. All of the control you’ll getting wanting try exhibited beneath the reels. The newest Banana Splash position has thrown cabanas, nuts apples, instantaneous wins, and you will 100 percent free spins incentive rounds offering triple multipliers. Their 95.8% come back speed and you may average exposure make it easy to play and you will delight in. It’s simple to enjoy but awesome enjoyable. Within this slot, a crazy Fisherman holds seafood signs you to definitely turn out to be bucks honors, when you’re multipliers help make your victories a great deal larger. Genéisst Blackjack Online Finest Gambling enterprises you to definitely Deal with Paysafecard NZ: ten Put which have PaySafe Geisha Magic Bucks Software Wikipedia Kompletný zoznam kasín Objavte svoje obľúbené online kasína Cosmobet CZ 2026 Budoucnost online sázení v České republice 1379859890 500casinokasino CZ – Oficiální online kasino 4938953 Spillt King of your Nile II Zero gratis eroflueden Demo Medzinárodné kasína Fenomén, ktorý spája hráčov z celého sveta Kompletný zoznam kasín Nájdi svoje obľúbené miesto na hranie Canada Charts & Things These Hulu Along with HBO Max Black colored Saturday Offer Is here now Only Over the years For another Game From Thrones Spinoff Kasína s minimálnym vkladom Hrajte bez veľkých investícií 22bet Local casino Opinion 2026 Get a good 250 Greeting Incentive! Admiralcasinokasino CZ – Vstupte do světa online her Greatest Online casino Web sites inside Canada: Best Canadian Gambling enterprise Internet sites to own 2026 Karaoke Team Knowledge & Personal secret romance slot casino Karaoke Bed room For Birthdays