/** * 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 Élvezze a személyes helyi kaszinót, amely nyereményjátékokkal várja az Egyesült Államokban. Entain Partners have proven a couple of times he could be yes an educated user programmes in the business Beste Boni & Freispiele getestet The various games is considered the most tall contributors with the Bally Casino’s victory to help you Nj-new jersey and you may PA Top Casino Number and Assessment Sweet Bonanza Demonstration ️ Spiele Sweet Bonanza Gebührenfrei Bally On-line casino � ios (Software Shop) Kostenlose coole angeschlossen Spiele zum besten geben! Eye of Casino genesis Keine Einzahlungsbonuscodes Horus Gebührenfrei zum besten geben exklusive Anmeldung Objevte Svět Online Kasin Jak Vybrat to Pravé pro Vás Játssz több mint 5000 online flash játékot és nyerőgépet Royal Las vegas Local casino Android os Application: Incentive and you can Online game Guide 8 Echtgeld Casinos inoffizieller mitarbeiter Untersuchung 2026: Auf jeden fall einlösen & erlangen Best Online Pokies Australian continent 2026 Real money Internet sites Kasyno pod rzeczywiste pieniądze 2026 Zestawienia kasyn na terytorium polski 300% Spielsaal Bonus Beste Anbieter qua 4-fachem Haben Angeschlossen Blackjack! Boni, Strategien & the magic flute Symbole vieles noch mehr 2026 Greatest Real money Web based casinos Top Within the July 2026 Top ten+ Bitcoin Casino No-deposit Bonuses inside 2026 Echtgeld Blackjack verbunden spielen: Geprüfte Liste von novomatic Slot -Spielen Casinos 2026 Hausärztliche Gemeinschaftspraxis Seafood Party nyerőgép Játssz ingyen a Microgaming kaszinó online játékával Best Web based casinos Accepting Boku inside 2026 Spielsaal 300% Bonus: Tagesordnungspunkt 300 Bonusangebote im Kollation 2026 Discover the Best Gaming Experience at Online Casino Top G Angeschlossen Spielbank: Slots & Erreichbar Spielothek Letter vortragen! Casinonic Gambling establishment: Wake up so you can dos,000 Acceptance Extra and Greatest Game Verbunden Casinos bloß deutsche Erlaubnisschein 2026: Tagesordnungspunkt 15 im Probe N1 Casino Review 2026 Try N1 Casino reliable and legitimate? Welches Falt-iPhone ferner welches jedoch?: iOS 27 ferner macOS 27 anschwärzen perspektivisch Apple-Geräte ntv de Ustawowe Kasyna Sieciowy w naszym kraju 2026: Zestawienia oraz Lista Freispiele ohne Einzahlung 2026 Kostenfrei Freispiele Bestes Angeschlossen Casino Echtgeld inside Land Online -Casinos echtes Geld der dichter und denker Geldspiele Gyors és online 150 Wikipedia Zetcasinosk SK – Kde nájdete najlepšie online kasína a bonusy Every day Revolves and you can Fortunate Wins 50 Freispiele exklusive Einzahlung Sofortig erhältlich No Abschlagzahlung Better No-deposit Bingo Websites 2026 100 percent free Bingo 22 Exclusives Digitales Eye of Horus gold tiger Slot App 150 Freispiel-Bewertungen Fahrkarte gratis vortragen bloß Eintragung Acceptance Also provides Asena gebührenfrei vortragen ohne Registrierung Gebührenfrei Kundgebung Sultans Fortune Online -Slot Slot All of the Ports From Las vegas Local casino No deposit Extra Codes The new and Established People July 2026 HotSlots ️ 35 Bonus Z brakiem Depozytu + jeden pięć stów Pln + pięćset DS Ingyenes online játékok a Pokiban! Játssz goldbet alkalmazásfrissítés most! Fortschrittlich für jedes Juli 2026 Neue Online Casinos book of ra online paypal Alpenrepublik Kasyna Internetowego Holandia 2026 Najistotniejsze kasyno online w całej Holandii Beste Verbunden Casinos abzüglich Verifizierung 2026 abzüglich KYC Holenderskie kasyna online: Ranking oraz legalność 2026