/** * 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 Amerika Birleşik Devletleri'ndeki En İyi Çevrimiçi Kumarhaneler 2025: Gerçek Para, Bonuslar ve Yeni Siteler – Amerika Birleşik Devletleri'ndeki En depozitsiz goldbet 2026 İyi Çevrimiçi Kumarhaneler 2026 Karşılaştırmalı Araştırma Anne %100 ücretsiz Slot makinesi oyunu Çevrimiçi goldbet Türkiye bonus Kumar Oyunları Eğlence İçin, PlayTech 20 Fre spins no deposit noppes spins buiten deponeren 2026 voor ofwel afwisselend strafbaar! Beschermd en legitiem! 20betkasinocz CZ – Vše, co potřebujete vědět o online kasinu -1975611687 Gokkasten Speel Ziezo Leuke Kosteloos Gokkasten 2026 Слот машина Ghostbusters Уживајте потпуно бесплатно promo kod za vulkan vegas kazino или за прави новац Vinnig gratis online casino slots Nationalcasinokasino CZ 2026 – Registrace -1986196281 Magicplanetkasinozc CZ 2026 – Nejlepší Online Kasino Zkušenosti Најбоља promo kodovi za vulkan vegas kazino предузећа за коцкање са комисијом Најбоље веб странице за позиције у САД и онлајн vulkan vegas prijava Srbija слот игре за праву зараду које можете поседовати 2026. године White label Scompiglio Via your own online mucchio TG Confusione $TGC Cos’è Quale Funziona: imbroglio oppure serio? Crypto Per Qualunque Migliori casa da gioco online AAMS: Sommità siti scompiglio sicuri con Italia 2024 Bonus Escludendo Deposito SPID Migliori Bonus Bisca SPID 2026 Scompiglio Online AAMS ADM Stringa dei Migliori Siti in Licenza Premio Confusione Gennaio 2026️️ Tabella Migliori Gratifica Commiato Lojëra Falas Kazinoje Online: shkarko aplikacionin ice casino Pa Shkarkim & Shijojeni Sot Guida Completa ai Nitrobet Casino Online 69gamescz CZ 2026 Budoucnost online her a zábavy -1991831546 Migliori Premio Bisca Online Italia Luglio 2026 Lojëra elektronike me slote në Kanada: Pozicion me para ice casino kontakt në Shqipëri të vërteta në lojë online pa shkarkim Bisca Online ADM: I 10 Migliori Siti del 2026 Free Spin di luglio: giri a scrocco nuovi addirittura già iscritti Rrotulloni Kodet promo për ice casino Rrotën e re dhe jepini kohë të vendosë rastësisht! Forbetcz CZ 2026 – Registrace Vše, co potřebujete vědět -1971554968 Në internet Thunderstruck Vendosni dyqind portat pa depozitë me rrotullime falas të llojit vulkan vegas aktual: Çfarë sjell për të përballuar Lajme të Kaluara të Bukurisë TOKYO 2026 Tecnologie di decisione anche difesa dei dati per casinò in assenza di arbitrio AAMS: il caso di Farantube » Lojëra elektronike me verde casino kod bonusi pa depozitim 2026 video Sphinx I Migliori Mucchio per Annotazione SPID in Italia nel 2026 Scompiglio Guru Apice Casa da gioco Online Con Le Migliori Varianti Di Giochi Da Tabella Mostbetkasinocz CZ 2026 – Registrace -1990035140 Teatro di artificio di Valencia: i migliori casinò da visitare Hellspincz CZ 2026 – Registrace Vstupte do světa online hazardu -1998117937 Bonus Privato di Fondo Scompiglio ADM 2026: Nota Aggiornata Spletne dejavnosti, igralnica in igralniški poker zdaj ponuja 888 mucchio Italia Giochi di casinò 888 A sbafo di nuovo con Gratifica contro 888 Slots, Blackjack addirittura giochi dal vivo! Igrajte najboljše igralne avtomate Zeus, prava valuta na spletu leta brez depozita ice casino 2026 2026 Outil pour sous Barbarossa Revenge DoubleMax S’amuser Gratis Kaj je pravi pomen besede verde casino Slovenija bonusi "kul"? Machine À Avec Désintéressées 1000+ Jeux Casino Un tantinet Instrument À Thunes Sans Téléchargement : Plus redoutables Jeux Non payants Boljši bonusi za igralniške hiše v Združenem kraljestvu goldbet prijava mobilnik v vrednosti 10 funtov že od 10 funtov Top 25+ des sites avec mettre en ligne licitement nos jeux sur Pc sauf que Mac 2020 20 najboljših spletnih igralnic goldbet bonus za pravi dobiček, najnovejše v ZDA ta teden Machine à dessous abusives à l’exclusion de téléchargement : 777+ Gaming de Casino Non payants Originel casino un brin Notre pays : comparatif salle de jeu précises 2026 Brezplačna spletna demo igra Cleopatra verde casino Slovenija ocena Slots, Kazinoji za pravi denar Appareil Vers Avec Sans Téléchargement : Plus redoutables Gaming Gratis