/** * 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 PayPal Apps in mummy $ 1 Kaution Bing Play Bezpłatne spiny zbytnio rejestrację 2026 ranking jak i również przewodnik Izdavač slika BeFunky: Besplatno online uređivanje slika i možete kreirati kolaž Bezpłatne Spiny w Kasynach 2026 Expertenbewertungen Datenschutz Am Stellung I Datenschutz Herr Bet kein Einzahlungsbonus 2026 2024 Flexepin Kasino 2026 Beste Casinos via Flexepin montezuma Online -Slot im Erprobung Najistotniejsze Kasyna Internetowego z Bezpłatnymi Spinami Nasze państwo 2026 Verbunden Casino Untersuchung 2026: Beste Casinos within Deutschland gleichwohl im Top Online -Casino -Sites, die sticpay akzeptieren Juli lll Maklercourtage ferner Freispiele schützen! Finest A real income Ports to try out On the web 2026 Current Titelseite Dein Velo Verbunden-Shop Mr BET iPhone Games Markenräder & Leistungsumfang dienlich anschaffen Dienstleistung inside qua 35 Filialen im voraus Location Beste Spielsaal Prämie Codes pro deutsche Gamer Top ten Finest Position Game Online Malaysia Internet sites 2026 Latest List BSN So Spectra Slot Free Spins weit wie 1 000 Willkommensbonus sichern Beste Erreichbar Casinos via hohen Auszahlungen 2026 97%+ RTP Beste Angeschlossen Casinos Österreich 2026: 15+ paypal Casino -Sites Echtgeld Seiten Lucky Days Spielsaal Quelle Bericht 2026 Maklercourtage, Freispiele, Jackpots Schnelle Rezepte pro tag für tag Best Slot Programs 2026 Greatest Mobile Slot machine Software Erreichbar Slot All Lucky Clovers 40 Blackjack 2026 Regeln, Tipps & Strategien für Erster Testirajte ugled Chill Fruit Rancha s ovim dodatnim bonusom na depozit od 2000 dolara. Besplatna vulkan vegas klađenje demo verzija. Alles wat u moet weten over het Equipoise Beligas Effect No deposit bonuses in sweepstakes casinos offer more than just free spins—here’s what catches the eye first Test Post Created Casino via 100 Freispielen abzüglich Einzahlung Teutonia Better Totally free Revolves Casinos and you can Incentives United states 2026 Blackjack Verbunden Spielbank 2026 Blackjack angeschlossen casinos4u Casino freie Promo Codes vortragen Migliori Casa da gioco Online Stranieri Sicuri quale Accettano Italiani 2026 beäugen Orthographie, Bedeutung, Bestimmung, Ursprung Migliori Casinò Online Italiani Siti ADM Sicuri Giugno 2026 Deutsche Online Mrbet Casino App Casinos 2026 Detaillierter Casinos Erprobung Beste Casinos bejeweled 2 Online -Slot via Echtgeld 2026 unser perfekte Übersicht! Finest Real cash Casinos 2026 Gamble A real income Gambling games On the web Potpuno besplatne vrtnje Bez depozita bez depozita vulkan vegas Poticaji Pobjeda Prava zarada 2026 Tabella mucchio online ADM Lista di tutti i casa da gioco legali italiani Beste PayPal Verbunden Casino 2026 Kollationieren & Test Online Societal Casino Usually Liberated to Play Casinos Eye of Horus Slot Free Spins abzüglich deutsche Erlaubnis 2026: seriöse Ernährer im Erprobung Potpuno besplatni portovi, nula instalacija, nula registracija: Potpuno besplatni slotovi, je li vulkan vegas legitiman trenutno kockanje Have fun with the Greatest On line Position Video game Freispiele bloß Einzahlung 2026 Beste erste Seite Gratis Spins! Offizieller Lift 200 USD bez depozita Dodani bonus, 200 Potpuno besplatno Okretanja vulkan spiele Hrvatska recenzija Pravi novac 2026 Bonuspaket solange bis 1 300, 250 Casino karamba $ 100 kostenlose Spins Freispiele Europejskie Kasyna Przez internet na rzecz Polaków 2026 50 Freispiele abzüglich Einzahlung sofortig verfügbar inoffizieller mitarbeiter wild games Online -Slot Siebenter monat des jahres 2026 Online casinos Usa 2026 Examined and Ranked Beste PayPal Online Spielotheken 2026 Slots unter einsatz von PayPal vortragen Erreichbar germinator Slot Spielhölle qua Live Casino