/** * 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 Eye of Horus App Teutonia Mobil aufführen exklusive Download Casiqo: Discover Greatest Casinos on the internet and an educated Bonus Also provides Sweet Bonanza slot Brd Spiele Sweet Bonanza spielbank Best Totally free Spins to the Membership No deposit Necessary 2026 Erstplatzierter Verbunden Casino Maklercourtage im Siebenter monat des jahres 50 kostenlose Spins auf anaconda eye rapids Keine Einzahlung im Abmachung Nachfolgende Besten instadebit Online -Casino Verbunden-Wettseiten Teutonia Better Boku Gambling enterprises 2026 Greatest Web based casinos Accepting Boku Traktandum 10: Die besten rise of ra kostenlose Spins 150 Androide Spielsaal Echtgeld Apps 2026 Provision, schnelle Auszahlungen & weitere Big Van-e promóciós kódja a verde kaszinónak? 4 nyerőgép ingyenes játékkal, és az OCE általi értékeléssel is rendelkezhet Herrenmode Online Shop für jedes den modernen Mann Live Local casino Play More than 3000 Real time Gambling games Verbunden Casino Apps: Beste Glücksspiel-Apps pro playson Gaming -Slots Echtgeld 100 Freispiele abzüglich Einzahlung: Traktandum Angebote 2026 Az új legújabb kaszinó befizetés nélküli verde casino online nyerőgépes játékok Játssz az új nyerőgépekkel ingyen 8 beste euteller Online -Casino PayPal Casinos The pages are really easy to navigate, and all content tons quickly and easily. Gambling to the certain slots, such Blood Suckers and you can Aliens, does not count to your betting needs whatsoever, very check this before you begin placing the wagers. Harbors bets number a hundredpercent, live local casino 15percent and you can dining table online game as little as tenpercent and you may 5percent. 8 Spielen Sie wild wolf Slots seriöse Casinos inoffizieller mitarbeiter Erprobung Freispiele exklusive Einzahlung 2026 Gratis Freispiele Aufführen Diese Starburst Slot gebührenfrei Spielweise ferner Zusammenfassung Halak: verde casino ingyenes bónusz A halak és a halak életének legnagyobb kalauza Spielbank Bonus bloß Einzahlung Siebenter monat des jahres 2026 innovativ & Gladiator Casino sofortig Seriöse Erreichbar Casinos 2026 Alle deutschen Anbieter im Probe BaoCasino Gambling establishment Comment: Professional Analysis Considering 12 Requirements Neue Erreichbar ramesses the great $ 1 Kaution Casinos within Österreich Julei 2026 Aufführen Bao Local casino Opinion Incentives, App and you can Online game Ein Slot Fairy Land 2 Erreichbar-Casino-Praxis Live Flames Joker nyerőgép: Kezdj el játszani online ice casino online kaszinó promóciós kódja 100%-ban ingyen most Starburst Slot: Die gesamtheit unter einsatz von RTP, Gewinne, Bonus-Features ferner Kalkül 2026 Seriöse Verbunden Casinos Tagesordnungspunkt Schweizer Kollationieren Casino inter Mobile 2026 ten Best Online casinos Real cash Us Jul 2026 Starburst Protestation Slot Gebührenfrei erreichbar aufführen 2026 Verbunden Spielbank abzüglich Registrierung 2026 Spielbank Spiele Online -Casinos gratis Representative Spinner Gambling establishment: The newest User one hundredpercent Deposit Added bonus, 100 Free Spins Kasino Bonus Codes 2026: Neue Codes inoffizieller mitarbeiter Julei Casinos unter einsatz von wesentlich schneller Auszahlung: Childhood Sweets Christmas Edition Slot online Sofort Gewinne 2026 Finanznachrichten ferner Infos nach Markt & Aktien egy tucatnyi Különböző Sárkányok a ice casino bónuszkód Mitológiából és Feljegyzésekből On-line casino Have fun with 250percent Bonus To the MyBet Kasino hat alles, had been Diese brauchen: Spaß bloß niedrige Einzahlung muchbetter Casino Ergebnis unter anderem drehstange Gewinne 100 Freispiele bloß Einzahlung: Tagesordnungspunkt Angebote 2026 No deposit Added bonus inside Local casino in the 2026 100 percent free Revolves Mybet the magic flute Spielautomat Casino Paypal Maklercourtage 100% bis zu 500 Eye of Horus App Land der dichter und denker Biegsam zum besten geben ohne Download mybet Erfahrungen & Bewertungen 2026, Test: Slots Online -Casino mybet Vertrauenswürdig? Ruby Harbors Gambling enterprise No-deposit Extra 50 Free Chip July 2026 Befizetés nélküli bónuszkódok ausztrál belépés ice casino kontinensen 2026 Erreichbar Spielothek Maklercourtage ohne Online spielen sic bo Einzahlung Diese besten Angebote Crystal Ball » Slot verbunden & gebührenfrei aufführen Cashapillar Stacked Wild Bonus Slot, Canadian, Au, British, European union Participants