/** * 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 Parhaat Litecoin-peliyhtiöt vuonna 2026 miten siirtää RoyalGame bonus päätilille Parhaat LTC-pelisivustot koettavaksi Onnekasta parhaat kasinopelit uutta vuotta Työpaikka Kommentti Nauti Hyvää uutta vuotta Työpaikka verkossa Great Blue Slots -pelit täysin ilmaiseksi – Nauti ja Starburst kasino arvostele Playtech 5 dollarin halvin Spinfest kirjautumisbonus paikallinen kasino Kanadassa ᐈ 150 100 prosenttia ilmaista pyöräytystä viidellä dollarilla Fantastic Goddess Nettikolikkopelien arvostelut Rizk kasinopelit verkossa ja opas 100 prosenttia ilmaisia ​​Ports British -kolikkopelejä Pelaa täysin ilmaisia ​​kolikkopelejä i24Slot login app download verkossa ja demokolikkopelejä huvin vuoksi Google Spend -uhkapeliyritysten kustannukset, Parhaat sivustot, uusi kasino talletusvapaa YoyoSpins jotka hyväksyvät Googlen poiston vuonna 2026 Chili paras kasino talletusvapaa RoyalGame Chili Fire -kolikkopeli kasinot Chili Chili Fire -kolikkopeli Löydä parempi mobiilikasino ilman talletusta vilkaise tätä sivustoa heinäkuussa 2026 Τα καλύτερα σύγχρονα λιμάνια και τζάκποτ για να αποκτήσετε τον Ιούλιο του 2026 Τα καλύτερα διαδικτυακά καζίνο που σίγουρα θα παίξετε με το Maestro το 2026, Maestro Credit Gambling Kasyno Boomerang w Polsce – Odpowiedzialna Gra i Zarządzanie Kontem Kasyno Boomerang w Polsce – Odpowiedzialna Gra i Zarządzanie Kontem Kasyno Boomerang w Polsce – Odpowiedzialna Gra i Zarządzanie Kontem Online Casino Luckera dla Polskich Graczy – Odpowiedzialna Gra i Zarządzanie Kontem Luckera Online Casino na Polskim Rynku – Metody Wpłat i Wypłat Środków Τζόγος 100% δωρεάν παιχνίδι κουλοχέρηδων χωρίς λήψη, μόνο διασκεδαστικό! Εντελώς δωρεάν Revolves χωρίς κατάθεση Κίνητρα Ηνωμένο Βασίλειο Ιούλιος 2026 Κωδικοί κινήτρων και καμπάνιες για το καζίνο Happy Nugget Gambling 2026 Βρετανικές επιχειρήσεις τυχερών παιχνιδιών χωρίς κατάθεση και θα έχετε κανόνες μπόνους 2026 Κύριος Wikipedia Lobstermania Android OS: Δωρεάν Λήψη APK Συνολική απόδοση Λοταρίας Νέας Υόρκης Τα καλύτερα μπόνους Revolves στις Ηνωμένες Πολιτείες για το 2026, αξιολογημένα στοιχήματα Τα δέκα κορυφαία λιμάνια που ξοδεύουν λόγω του λογαριασμού κινητού τηλεφώνου. Θα θελήσετε να παίξετε τυχερά παιχνίδια. Ιστότοποι Sister Casino 2026 Ιστότοποι όπως η αγαπημένη σας λίστα ελέγχου cuevhv mamma: Επίσημος κωδικός πρόσβασης για την κατοχή του MAMMA: Ακριβής λήψη πολλαπλών κινήσεων χωρίς δείκτες Κύριος Wikipedia Εορτασμός Lion Festival Enhanced Gambling Enterprise Game Σχόλιο BetMGM Guide des paiements au casino en ligne : méthodes sûres et rapides pour vos Καλύτερα online παιχνίδια κουλοχέρηδων Μπόνους 2026 Καλύτερη θέση Προσθήκη μπόνους Καζίνο Δωρεάν περιστροφές χωρίς κατάθεση Κίνητρα η πραγματική προσφορά Κέρδη χρημάτων ΗΠΑ 2026 Δωρεάν παιχνίδια στο διαδίκτυο κατά τη διάρκεια του Poki Gamble Now! Εντελώς δωρεάν μπόνους χωρίς κατάθεση Revolves Κερδίστε ένα πραγματικό εισόδημα το 2026 Πληροφορίες για πενήντα τροχούς παιχνιδιού 2026, Εντελώς δωρεάν συσκευή AI Εντελώς δωρεάν Revolves Incentives 2026 Twist & Winnings WildCraft Τα καλύτερα καζίνο Neosurf για το 2026: Εταιρείες τυχερών παιχνιδιών που μπορείτε να δεχτείτε Neosurf Αξιολόγηση κουλοχέρη Lucky 88 2026 Κερδίστε 888x την επιλογή γραμμής πληρωμής τους! 5 καλύτερες επιχειρήσεις ζωντανού τζόγου εντός του 2026 Κίνητρα τοπικού καζίνο χωρίς κατάθεση για κινητά: Αριθμός 2026 Δωρεάν περιστροφές χωρίς κατάθεση 8.500+ εντελώς δωρεάν περιστροφές στις επιχειρήσεις τυχερών παιχνιδιών με πραγματικό εισόδημα Καιρικές συνθήκες και πρόβλεψη για τη Βρετανική Κολομβία από το Towns Environment Canada Τα καλύτερα καζίνο κρυπτονομισμάτων για όλους εμάς τους ανθρώπους στις καλύτερες ιστοσελίδες τυχερών παιχνιδιών κρυπτονομισμάτων του 2026 Εντελώς δωρεάν περιστροφές Κίνητρα χωρίς κατάθεση Κερδίστε πραγματικά χρήματα 2026 Happy 7 Gaming store Χωρίς κατάθεση Προσθήκη μπόνους 2026 Rejsefører derudover bedste pengespil online nettet Надежные казино онлайн 2026 года – играйте без рисков и с максимальной отдачей Олимп казино официальный сайт в Казахстане – Olimp Casino Mostbet Casino Online – Bonuses and Promotions for New and Loyal Players