/** * 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 Unser besten Erreichbar Casinos über Echtgeld 2026 ︎ Online Spielothek via Echtgeld Bezmaksas griezieni We Dag, Spil Gratis Azartspēļu uzņēmums hitnspin kazino bonuss I Juni Neue Angeschlossen Casinos as part of Alpenrepublik Siebenter monat des jahres 2026 Spielen Más grandes lugares Los mejores casinos en línea para baccarat sobre casino en línea sobre Bitcoin para juegos sobre chiripa sobre cripto Safe 2026 two hundred matter Wikipedia Azartspēļu uzņēmums jauns bez depozīta goldbet esošajiem spēlētājiem Nozīmīgs bez depozīta Pievienots bonuss 100 100 procenti bez maksas Atgriežas 2026. gada jūlijā Queen of your own Nile Casino slot games Enjoy Better Commission Video game from the Mr Bet 1 Gambling enterprise Fußballwetten-Bonus exklusive Einzahlung 2026 50 kostenlose Spins unter crystal tanzerei Keine Einzahlung Spielzeit-Angebote Spiele Top-Online-Slots Seite besuchen & Tischspiele within Deutschland Uptown Pokies Gambling establishment No deposit Bonus Requirements 2026 Inform Spiele Crystal Tanzabend inoffizieller mitarbeiter Kasino um Echtgeld & unter einsatz von Prämie šimtas 100 procentų nemokamų sukimų be depozito paskatų 100 nemokamų papildomų sukimų Codeta Erfahrungen » Kundenberichte & Kritik Juli 2026 Beste Angeschlossen Casinos: Tagesordnungspunkt Casino -Slot Lucky 7 10 Verbunden Spielotheken im Abmachung Better On vacation reactors slot the net Zero-deposit Added bonus Carson’s Journey Casumo Provision Kode Siebenter monat des jahres 2026 Aktueller Kupon Beste Verbunden Casino Brd quick win Deutschland Boni 2025 Erfahrungen Ferner Probe 1xBet Gambling establishment Comment 2026 1500 Greeting Added bonus Casumo Spielbank Test SlotsUp Expert Erfahrungen Top 10 The fresh Online slots of 2025 Rated because of the Playcasino Online-Sportwetten über Top-Wettquoten quick win App-Link inside 20Bet Daugiau nei 60 uostų, kuriuos verta patirti Tikra valiuta Internete Be depozito Papildomas bonusas Internetiniai lošimo automatai. Tikros pajamos. Pietų Afrikos regionas 2022. Laimėkite tikrus pinigus. Casumo Ihr Spielsaal Untersuchung 120 Freispiele + 500 je Jedweder The fresh FanDuel Local casino bonus offers 40 within the gambling establishment loans and 500 bonus revolves Spielsaal Provision ohne Einzahlung Juli 2026 Sukite naujus goldbet kazino Lietuva valdiklius Relativpronomen: dieser, wafer, dies & Besuchen Sie diese Seite ihr, diese, dies X-23 Wikipedia Casumo Testbericht Wertvolle Tipps & Bonus-Angebote Casino Provision dolphins pearl Spielautomat abzüglich Einzahlung 2026, kostenfrei Freispiele! Nachfolgende besten Merkur Verbunden Casinos 2026: Hier Prämie schützen Interwetten Prämie Quelltext Julei Slots 100 kostenlose Spins keine Einzahlung 2026 » Aktueller Kupon On the web Pokies NZ 2026- Better Real cash Pokies Nachfolgende besten Verbunden Casinos as part of Teutonia 2026: Traktandum 10 Spielos Gebührenfrei Spiele attila Slot Free Spins je Kinder unter Kinderspiele de Casumo Erfahrungen: Infolgedessen schwören unser Casino im Erprobung 2026 Lehrmittel-Onlineshop für rocky Spielautomat Naturwissenschaften Genius D&D 5e 2024 Casumo Bonus Kode: 100% Neukundenbonus + 50 Freispiele 30 Freispiele Exklusive Einzahlung July 2026 ️ vulkanbet Casino at ohneeinzahlungbonus com Better A real income Casinos on the internet Leading and Legitimate Web sites Slotmagie 50 Freispiele Juli 2026 Exklusiv Maklercourtage „House of Fun“ prisijungimas ir pramogos vulkan spiele kazino promo kodai Viešųjų lošimų įstaigoje Spielsaal Free Spins 2026: Kasino Freispiele 5x Cherry Party $ 5 Kaution ohne Einzahlung Kostenlose Spiele gebührenfrei vortragen nach Hauptpreis de Nemokamas goldbet prisijungimas vaizdų redagavimas internete Crystal Tanzabend Slot Untersuchung & Sichere Crystal Tanzabend Casinos 2026 Besten Verbunden Spielbank Zahlungsmethoden 2026: Auf dig dig digger Spielautomat jeden fall & Schnell Finest Visa Gambling enterprises to have Debit and Handmade cards