/** * 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 Täysin ilmainen viidenkymmenen dollarin kolikkopeli ilman talletusta Rekisteröitymisbonus Australian mantereella 2026 British On-line casino Record Top fifty Web based casinos Rated having 2026 Bucks Stampede -kolikkopeli: Huomioita, bonuksia ja täysin ilmainen nautinto Arabian Nights -kolikkopeli Pelaa Arabian Evening Harborsia Ilmaiseksi Parhaat ilmaiskierrospeliyritykset Yhdysvalloissa: Ilmaiset kolikkopelit lisäbonuksella ja ilmaiskierroksilla Mängi reaalajas blackjacki pärisraha eest parimatel saitidel 2026. aastal Yksinkertaisia ​​vinkkejä blackjackin pelaamiseen aloittelijoille: Opi ja aloita tehokkaasti Parimad ruleti veebisaidid, mida proovida Pärisrahaga online rulett 2025 Bigfoot Fortunes slotimäng – mängi juba Trinocasino sisselogimisboonus täna veebis tasuta Uusim musta värvi Rakendus Trinocasino rüütel Mängi Ignition Local kasiinos Trinocasino rakenduse allalaadimine Eestis 2024 pärisrahaga online blackjacki Parimad veebipõhised kasiinod pärisraha eest: parima online-kasiino valimine Trinocasino ID sisselogimine 2026. aastal Parimad krüptokasiinod 2026. aastaks Parimad 24 Casino esimese sissemakse boonus Bitcoini kasiinod Blood Rakenduse YoyoSpins allalaadimine arvutisse Suckersi online-slotimängu kommentaar ja kus seda Ameerikas mängida Parimad elektroonilise pokkeri veebisaidid 2026. aastal Hinnangud Boonused Trinocasino sisselogimine võrgus Videomäng Ηνωμένες Πολιτείες Χωρίς κατάθεση Επιπλέον Διαδικτυακά καζίνο Ιούλιος 2026 Το νεότερο Επιπλέον Εντελώς δωρεάν Revolves Χωρίς κατάθεση. Παραμείνετε όσο κερδίζετε! Τα καλύτερα μπόνους σε απευθείας σύνδεση καζίνο για το 2026 Διεκδικήστε τώρα Απαιτήσεις μπόνους Χωρίς κατάθεση Προστέθηκε μπόνους Επιχειρήσεις τυχερών παιχνιδιών 2026 Η BitStarz λανσάρει πενήντα 100 τοις εκατό δωρεάν περιστροφές No Put Incentive the real deal Νόμισμα Παίκτες Jack And the Beanstalk Demo Απολαύστε 100% δωρεάν κουλοχέρηδες από το Great.com Το μέρος που πρέπει να επισκεφτείτε παγκοσμίως για επιχειρήσεις τυχερών παιχνιδιών και αθλητικά στοιχήματα Ισχυρίζονται ότι έχουν πενήντα δωρεάν περιστροφές χωρίς επιλογή κατά τη διάρκεια του LeoVegas σήμερα Δωρεάν περιστροφές χωρίς κατάθεση, δηλωμένες, ελεγχόμενες και αξιολογημένες για κατοχή το 2026 Che sinon gioca alle slot a titolo di favore da caffè Che Ottenere il Premio Consigliabile su Te Affinché rso nuovi scompiglio online sono migliori di quelli vecchi Come sinon gioca alle slot verso sbafo da caffè Τα νέα 100% δωρεάν Revolves 2026: Οι τελευταίες προσφορές χωρίς κατάθεση τώρα Molto slot machine, altri giochi di casinò disponibili Αξιολόγηση του Huge Mondial Casino για το 2026 Θα ήταν θεμιτό να το δοκιμάσω; Qual anche il illusione di purchessia sportivo e partner dei mucchio? Παίξτε τα καλύτερα κουλοχέρηδες και μπόνους Affare Sono rso Ricompensa Senza contare Pieno Rivolto Mucchio? Riguardo a William Hill: 400 giri senza oscuro Subito Migliori siti scommesse SPID 2025 in premio esclusivi Σχόλιο για το Bitcasino io Alive Casino 2026: Αίσθηση πραγματικής εξόδου Volte MIGLIORI Gratifica DEL Trambusto Privato di Fondo 7 Δεξιά πάνω 7 Κάτω Μάθετε να Τζογάρετε Παιχνίδια online καζίνο Che gareggiare mediante volte premio in assenza di pesatura di culmine Volte migliori casa da gioco quale offrono una avviso 10� a titolo di favore Contro William Hill: 400 giri privato di questione Immediatamente Γνώμη για το κουλοχέρη Grand Casanova 2026, Δωρεάν παιχνίδι 97 45% RTP Επιπλέον κωδικοί χωρίς κατάθεση Αποκλειστικές προσφορές Δωρεάν Τώρα εντός του 2026 Κορυφαίες επιχειρήσεις τυχερών παιχνιδιών με χρεωστική και πιστωτική κάρτα του 2026 που ελέγχθηκαν και δοκιμάστηκαν με ιστότοπους 100% δωρεάν Revolves για να αποκτήσετε τους τρέχοντες πελάτες του Ηνωμένου Βασιλείου τον Ιούλιο του 2026 Banker give: Also offers you to definitely:step 1 without a fees, because of a somewhat higher successful potential Report on most useful casino incentives inside 2015 Απολαύστε 50 100 τοις εκατό δωρεάν περιστροφές Starburst χωρίς κατάθεση; Πολλές προσφορές μέσα! There is something for everybody experts, from harbors in order to desk games, live specialist headings and you may abrasion notes