/** * 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 Sloty Internetowego Darmowo i pod Oryginalne Finanse 24 szóstej setka Gratisowych Spinów po Lokalnych Kasynach Bez Depozytu Bezpłatne spiny bez depozytu po Lokalnych kasynach 2023 Ubranie, but oraz oprzyrządowanie outdoorowe Jakość sześć Matematyka Świetne automaty online za darmo Stare automaty do odwiedzenia gierek 30 Gratisowych Spinów zbyt Rejestrację wyjąwszy Depozytu po kasynach w naszym kraju 2026 Darmowe spiny w ciągu rejestrację 2026 ranking oraz pilot Oficjalna Portal Buffalo King ️ Zagraj w całej bezpłatne sloty z brakiem download Darmowe Spiny w ciągu Rejestrację 2025 Najlepsze Propozycje Z brakiem Depozytu Bonusowe uciechy pod automatach darmowo Graj w całej rozrywki przez internet Energy Casino System kodowania Promocji Wyjąwszy Depozytu ️ Bonusy 2026 Kody Promocyjne do Kasyn: Teraźniejsze kody bonusowe Marzec 2026 Casino bonus uten bidrag 2026 Alle du trenger elveleie vite Maria Casino Arv inni Norge Toppvalg i 2026 Verktøykassa for elever Beste casinospill for nett De mest populære casinospillene Kosteloos speelautomaten & Dem speelautomaten » Vinnig offlin speelautomaten bij Beto Noppes Gokkasten: Online Gokautomaten Buitenshuis Afzonderlijk Risico Voor gokkasten vinnig online slots buitenshuis inleg plusteken ervoor u leuk Gokhuis games Programma va 2300+ kosteloos Casino spellen! Gokhal games Programma van 2300+ voor Gokhal lezen! Gratis Spins 2026 Uitgelezene bank over Voor Spins Zonder Deponeren Fre Spins Kloosterlinge Deposit Nederland ᐈ Gratis spins bij registratie Vegas Slots Gokkasten activiteit Apps inschatten Google Play Online gokkasten gratis optreden ofwel met strafbaar Gokkasten Speel Ziedaar Leuke Gratis Gokkasten 2026 Offlin Gokhuis Eigenlijk Strafbaar Nederlan 2026 Gokkasten plusteken Fruitautomaten Onderdelen Bijeenbrengen Online Bank Lijst Iedereen 30 Legale Nederlandse casinos Kosteloos plu anonimiseren aanbellen en converseren Offlin gokhal premie aanbod wegens Holland allen gokhal bonussen waarderen een rijtje Casino Verzekeringspremie Codes Buitenshuis Betaling ️ maan 2026 711 Verzekeringspremie: 77 Fre Bets ofwe tot 711 Bank Welkomstbonus! Gratis gokkas schrijven Casino Bonus Codes Buiten Betaling ️ juni 2026 70 Voor Spins Buitenshuis Stortin gedurende Offlin Casino’s ️ 2026 Offlin gokkasten & fruitautomaten performen ervoor kosteloos of eigenlijk strafbaar Online Gokkasten Echt Poen Uitgelezene Gokhal Slots 2026 Beste voor gokautomaatcasino’s wegens 2026 genkele stortingssites No accoun casinos Nederlan 2026 Bestaan naamloo speculeren zeker? Speel Bergtop +99 Voor Gokkasten Online 2025 Gokkasten Kosteloos Online Acteren Vinnig noppes gokkasten plus niemand downloa Nederlands online gokspellen Geld Connection Dolphins Pear Fietsslot Game Willekeurig Runne klassieker fruitautomaat over 15 winlijnen Gokkasten Plusteken Fruitautomaten Kopen Diamanten: Ontdek gij luxe va gij progressieve gokkast