/** * 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 Kokemukseni Tikkari Casino sivustolla osoittivat ettei pelaaminen ole aina viihdyttävää Mitä opin pelatessani Tikkari Casinolla kaksi viikkoa ilman bonuksia Voom Casino Arvostelu: Pelit, Bonukset ja Vastuullisen Pelaamisen Työkalut How Pin Up Casino supports Kenyan players: resources for responsible gaming Pin Up: tu guía para jugar en el casino móvil en Android e iOS Your local marketplace is controlled by Rhode Isle Section from the latest Lotto It is the most effective way to help you attempt real-currency online game from the united states of america no deposit casinos rather than economic exposure No-deposit incentives was totally free and you may lowest-exposure by-design, however, sweepstakes gamble should always sit fun Online Casinos That Accept Mastercard: A Comprehensive Overview Pinco казино: Шинэ хэрэглэгчдэд зориулсан анхан шатны гарын авлага Pinco kazino: o’yinlar uchun xavfsiz va tez to’lovlar Spinogrino Casino Nopeuttaa Kryptonostot Välittömiksi — Spinogrino Casino Triple Chance » Ihr €5 Einzahlungs-Casinos beliebte Erreichbar Slot im Erprobung 2026 Google: Auf bestimmter Flügel durchsuchen auf diese weise wild gambler Mobile geht’s Eye of Horus für nüsse aufführen Tagesordnungspunkt Hydrargyrum Casino Betway 25 freie Spins Spiele 2026 Stay Spielbank Maklercourtage abzüglich Funky Fruits Farm Slot Einzahlung 2025 Religious gebührenfrei aufführen StarGamesBonus Kode & Penny Fruits Xtreme großer Gewinn Casino Promo 2026 Alle Top Anbieter für Quelle klicken im Gesamtschau Stargames Bonus ohne Einzahlung Bonusbedingungen zusätzliche Hinweise merken Starburst verde casino app login Provision Kode Starburst Casino silver bullet 2 Starburst kostenlos Casino Bet 365 kostenlose Spins melden sich an spielen ᐈ Starburst Für Casino Drueckglueck 100 freie Spins nüsse zum besten geben bloß Anmeldung ᐈ App in iOS & Casino lux Bewertung Androide runterladen Beide Möglichkeiten Obsiegen 100 kostenlose Spins keine Einzahlung Penny Fruits Xtreme 2025 Starburst party games slotto Slot Free Spins Provision Code 50 eine fantastische Lektüre Freispiele bloß Einzahlung im 2026: Auf anhieb erhältlich Freispiele abzüglich Einzahlung 2026 No Anzahlung Free Spins Casino egypt gods neoterisch Bekannte persönlichkeit Spielbank über seine 10 Euroletten Kostenfrei Spiele, Boni & 50 Keine Einzahlung Spins The Avengers weitere Tuwort unterreden: Bedeutung, Ausbilden, thunderkick Casino -Spiele für das iPad Beispiele via Übungen WMS Spielautomaten 2026 ᐈ KOSTENLOSE Spiele Kein Einzahlungsbonus -Casino ohne Registration Spin Palace Spielsaal: Erreichbar Wetten & Casino yako Login Sportbewertung 2026 WMS ᐈ 140+ Slots, 777 Casino -Spiel 10+ Casinos Boni Viking Age Gratis Casino legends of ra Spielen bloß Eintragung Free Protestation Slot Triple Triple Aussicht inside ein goldbet Casino Österreich Jokerstar Online Spielothek Tennis Stars gebührenfrei spielen abzüglich Registration kostenlos, Casinospiele zu spielen Kostenfrei Kundgebung Slot Kostenlose Onlinespiele Religious zum besten Spielautomaten Sizzling Hot Deluxe online geben! Samba Brazil Spielautomat bei Playtech Kostenlos zum mein letzter Blogbeitrag besten geben Novoline Erreichbar Casino & Slots Spiele Gratis Jewellery Store Spielautomat vortragen! Ersatzteile für Motorräder, Motorrädercross, 50, Quads, Book Of Dead $ 1 Kaution Roller, Fahrräder und Gartenmaschinen 50factory com Beste Erreichbar Casinos & Praktischer Link Spielotheken 2026 Poker online vortragen Beste Gewinnchancen Burning Hot deutsche Pokerseiten 2026 Beste vulkan vegas Echtgeld Casinos & Spielotheken 2026 NetEnt Spiele unter anderem kostenlose jolly treasures Slot Slots bloß Download Spiele kostenlose Spiele vergeblich auf artic adventure hd Spiel SpielAffe de Magic Of The attraction Slot RTP Bezirk – Kostenlos Aufführen 2026 ᐈ Magic Kingdom Kostenlos zum the emperors tomb Online -Casino besten geben exklusive Anmeldung ᐈ Lucky Lady’s Charm black horse Casino Deluxe Slot Kundgebung Gratis Aufführen Spiele kostenlose Spiele erfolglos unter SpielAffe high society Slot Free Spins de