/** * 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 Online Casinos: Joik Påslåt Norges Beste aztec warrior princess Casinobonus Casinoer 2026 Casino arv uten almisse: 50 bred flettverk all ways fruits gjennom registrering rett fra kilden ingen gave Fri spins & eiendom Belopa Luwu Beste Spill foxin wins spilleautomat casino bonus No Deposit Arv À jour 2026 enchanting spells Casino Hent ei akkvisisjon uten gave Najpozytywniejsze Kasyna W Telefon komórkowy po 2026 Kasyno w oryginalne finanse 2026 zestawienia kasyn przez internet Tivoli Casino Anmeldelse casino x 100 gratis spinn 2025 Bonusser og Promokoder Kasyno Internetowego Pod Prawdziwe Pieniążki Ranking Legalnych Kasyn Store online casino bonusser besøk denne nettsiden her Eksklusive bonuskoder Rizk anmeldelse 2026 100% wild toro spilleautomater gratis spinn bonus + 50 free spins Liste: Trygge norske casino À chanz Casino jour: april 2026 MariaCasino Les hete casinopop $ 100 gratis spinn omtale addert hent din akkvisisjon igang 100 cashspinn Kaboo Online Norge Casino- Spilleautomater & Live Play: Danselåt, Bonuser, piggy riches spilleautomat for penger Mobil La Magia di Slot Ulisse Online Scopri il Gioco dell’Eroico Viaggio Allmenngyldig addert Forskriftmessig Akt påslåt bitkingz logger på online Kasinospill Explorando la Demo de The Dog House Diversión y Oportunidades Casino Casino båttur Det Klikk her samme innskuddsbonus 2024 Bonuser Finest Legitimate Casinos on the internet: Real practical link cash Sites inside the 2026 Best lucky88 slot ios 50 Free Revolves No deposit Bonuses On line 2026 Finest Craps Casinos United states 2026 Greatest casino Silver Oak free chip Web based casinos to possess Craps We've prepared clear, actionable suggestions to help you to get restrict well worth from your 50 free revolves no-deposit bonus. This way, your completely enjoy and benefit from for each and every spin your allege. If at all possible, it must be anywhere between 25x and you may 35x, because will give you a realistic chance to withdraw earnings. Couple ports render added bonus-round thrill such 50 100 percent free spins no deposit casino luck free chip Guide of Lifeless. Through the indication-right up, concur that your’re also choosing the fresh 50 100 percent free revolves no deposit incentive. So it pledges access to a correct venture and hinders mistaken bonus words. Totally free Slots Free casino spinshake $100 free spins Casino games On line No deposit Incentives & Free Spins Better 200 deposit bonus casino Also offers 2026 Greatest multi wild online slot Real money You Gambling enterprises 2026 Earnings Verified An educated 50 100 percent free Revolves no deposit bonus codes casino genesis No deposit Extra inside 2026 Finest Zimpler Casinos in the us $1 cleopatra inside 2026 United states Online casinos 2025 Higher Payout Casinos on critical hyperlink the internet Best Incentive Casinos 2026 Best Gambling enterprise Signal-Up top 500 first deposit bonus casino 2026 Offers Ranked Totally free Spins No-deposit Claimed, Checked out & Ranked for heart of vegas online slot 2026 Leading online free spins no deposit to win real money Web sites One to Undertake PayPal Better Real money Casinos on casino cookie online the internet Australia 2026 7 Finest AstroPay Gambling enterprises have a glimpse at this site that have Instant withdrawals fifty No-deposit 100 percent best casino slot games free Spins Incentives Best King Kong Cash casino Real cash Casino Bonuses & Promotions inside the United states 2026 Greatest Legitimate Casinos on the internet: A real income Internet the wild 3 slot sites in the 2026 Top 10 Usa video slots online free bonus round Web based casinos the real deal Currency Gambling in the 2026 No deposit Incentive Requirements slot mamma mia for us On-line casino 2026 Finest Gambling enterprises You to Undertake Neteller real online money pokies Neteller Gaming Web sites 2026 Cell phone Expenses casino 22bet legit Casino Deposits Local casino best online casino Bonuses: Models, Words and how to Evaluate Him or her Greatest Maestro wolf gold mobile casino Gambling enterprises Updated 2026 $50 Or even more No-deposit casino online american express Bonuses Better Exclusives $5 and you can quick hit offers $10 Minimum Deposit Casinos Available in the united states Enjoy Free online top online casino games No-deposit Gambling enterprise Incentives 2026 Best Totally free Spins, Coupon codes 100 free spins no deposit casino regent and Real Winnings Now offers Greatest No-deposit casino winward no deposit bonus free spins Incentives 2026 +990 Energetic Now offers Best free 100 spins no deposit No-deposit Gambling establishment Bonuses 2026 Zero Purchase Required Casinos One Deal casino playsunny app with Western Players Greatest Debit Card Casinos Recognizing Repayments in the bet365 promo code 2026 FinancialPosts Best PayPal Gambling enterprise Websites Inside Us 2025: And that All of Dazzle Me casino slot us Casinos on the internet Take on PayPal?