/** * 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 Slotmagie 50 Freispiele Juli 2026 Exklusiv Maklercourtage „House of Fun“ prisijungimas ir pramogos vulkan spiele kazino promo kodai Viešųjų lošimų įstaigoje Spielsaal Free Spins 2026: Kasino Freispiele 5x Cherry Party $ 5 Kaution ohne Einzahlung Kostenlose Spiele gebührenfrei vortragen nach Hauptpreis de Nemokamas goldbet prisijungimas vaizdų redagavimas internete Crystal Tanzabend Slot Untersuchung & Sichere Crystal Tanzabend Casinos 2026 Besten Verbunden Spielbank Zahlungsmethoden 2026: Auf dig dig digger Spielautomat jeden fall & Schnell Finest Visa Gambling enterprises to have Debit and Handmade cards Neue Erreichbar Casinos 2026 seriöse Newcomer im Erprobung Echtgeld Casinos Ostmark Julei 2026: Auf jeden disco funk Casino fall Aufführen 2025 m. sausio mėn. naujienų archyvas: 2025 vulkan spiele kazino Lietuva m. sausio mėn. ataskaitų katalogas Kasino Spiele gratis spielen nach Hauptgewinn de Multiple Diamond Slot machine game from the IGT Gamble Online for free Beste Online Casinos Deutschland dolphins pearl deluxe Bonus 2026: Meine Erfahrungen Verbunden Casinos via Startguthaben 2026: Gratis Haben Online Echtgeld Casinos für jedes vulkan vegas Casino-Boni Deutsche Aktuelle Liste 2026 Most trusted Web based casinos to own Usa Professionals: Our Expert Rankings To have 2026 Diese 10 besten Echtgeld Online Casinos & Spielotheken 2026 Visiškai nemokami „Revolves“ premijos be depozito 2026 didžiausias verde casino be įnašo m. Trolls Official Franchise Site Echtgeld Casinos 2026: Traktandum Ernährer unter einsatz von echtem Payout inoffizieller mitarbeiter fruit cocktail Online -Casinos Untersuchung Casino bloß Eintragung 2026: Sofort zum besten geben Top 5 100% legale Verbunden Casinos as part of Alpenrepublik 2026: 100 000 pyramid Slot Free Spins Bestenliste Giropay Spielbank 2026: Traktandum Casinos Casino inter Bewertung über Giropay Internetiniai lošimo automatai verde casino be įnašo mobiliesiems Tikri pinigai Finest 100 percent free Position Apps to own ios and Android os Bestes Online Spielbank Echtgeld 2026 Top Seiten auftreiben Echtgeld Spielbank Monat des frühlingsbeginns 2026: Diese besten Provider über 50 Keine Einzahlung Spins bonanza Bonus inoffizieller mitarbeiter Vergleich Lowest Put Gambling enterprises Uk Best Low-Share Web sites 2026 Beste Echtgeld Erreichbar Casinos 2026: Vergleich & Untersuchung „Funky Fruit“ verde casino partnerio programėlės atsisiuntimas lošimo automatas: žaiskite internete svetainėje Mybaccaratguide.com 50 Freispiele bloß Einzahlung 2026 Diese besten Angebote Beste Eye Of Horus Slotspiel für Geld PayPal Verbunden Spielbank 2026 Kollation & Untersuchung Finest Sweepstakes Casinos 2026 100 percent free Coins and Sc Bonuses Nemokami internetiniai žaidimai Pokyje. hitnspin be įnašo online kazino Mėgaukitės dabar! Erreichbar Casino Lastschrift 2026 Gibt dies SEPA-Einzahlungen noch? Nachfolgende besten Bitcoin- 50 Keine Einzahlung Spins GNeinme ferner Krypto-Casinos je Verbunden-Spiele inoffizieller mitarbeiter Jahr 2026 T O.P Wikipedia Traktandum Boni bloß Einzahlungen 2026 Casino Bonus Codes Sichern Neue Online novoline tricks book of ra freispiele Casinos Helvetische republik 2026: Tagesordnungspunkt Ernährer & Boni Titanic Position Get involved in it On the web at no cost and for Real money „Funky Fruits Ranch“ sąlygos, premijos promo kodai hitnspin lošimo automatams ir nemokamas žaidimas 92 07 % RTP Tagesordnungspunkt Boni ohne Einzahlungen 2026 Kasino Provision Codes Beschützen StarGames Spielbank Online Land der dichter und denker: Boni, Freispiele, Slot Bonanza Mobile App, Slots Nachfolgende besten Paypal Casinos 2026 Auf jeden fall einlösen via Bonus Blackjack Method Charts How to Enjoy Perfect Blackjack Realios pajamos hitnspin programos prisijungimas yra prieglobstyje Wunderino Test & Erfahrungen 2026 Sei Basic Instinct Slot Free Spins nachfolgende Angeschlossen Spielhalle seriös? Offizieller Fahrstuhl im Netz Beste Bitcoin Casinos 2026: Unter allen umständen & ungenannt unter einsatz von BTC Sehen Sie sich auf dieser Seite um spielen