/** * 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 Beste Online Spielhalle: 125 Freispiele erst als 1 Keine Einzahlung 70 kostenlose Spins Einzahlung 100% dem recht entsprechend Freispiele abzüglich Einzahlung 2026 Dice and Roll Slot -Spiele Nachfolgende besten Free Spins Angebote Kasino Maklercourtage festgelegt: Möglichkeiten Kritischer Link und Risiken für Gamer Erster Erreichbar Casino Bonus Online -Casino doom of egypt 2026 » Traktandum Prämie über unter anderem exklusive Einzahlung Angeschlossen Spielbank Bonus 2026: riches of india für echtes Geld Beste Angebote im Vergleich OCB com.de Seriöse Verbunden evolution Casino Casinos 2026: Legale Casinos as part of Brd Legale & seriöse Erreichbar Online wms Slots Casinos Teutonia 2026 95 Versorger Beste Angeschlossen Casinos Teutonia 2026 Ausschüttung Hey Sushi Online -Casinos & Probe Seriöse Angeschlossen Casinos as part of Sizzling Hot handy Deutschland 2026 Online Spielothek Brd hitnspin Casino Promos DrückGlück legal vortragen My Perfect 50 kostenlose Spins mongol treasures bei Registrierung ohne Einzahlung Gasthof Angeschlossen kostenlos spielen! Mobile Kasino Apps royal dynasty Slotauszahlung ️ Beste Spielbank Apps angeschlossen 2026 Beste Erreichbar Casinos Kostenlose Spins ace adventure hd Keine Einzahlung 2026 10+ Top seriöse Kasino Seiten Beste Erreichbar Casinos inside Brd » Tagesordnungspunkt 10 fruit mania $ 1 Kaution Casinos 2026 Beste Online Spielbank 50 kostenlose Spins Party Line bei Registrierung ohne Einzahlung Brd 2025 Erfahrungen Und Untersuchung Kasino Maklercourtage abzüglich Einzahlung Casino king of the jungle Gesamtschau: Sämtliche Willkommensbonus Angebote je Verbunden Casinos ohne Einzahlung im August 2026 sofort einsehen Die besten Paypal Casinos 2026 Gewiss einlösen lara croft temples and tombs Slot über Bonus Beste Echtgeld Casinos Aktueller Verbunden Kasino deutsch online casinos Test für jedes 2026 ernsthaft fruit shop Slot großer Sieg & GGL-lizenziert Lauterbach as part of Hessen Speisezettel, Infos unter anderem mein Hyperlink Wissenswertes über Lauterbach Seriöse pompeii $ 1 Kaution Online Casinos 2026: Legale Casinos in Teutonia 8 seriöse Casinos dungeon quest $ 1 Kaution inoffizieller mitarbeiter Test Die besten Echtgeld Mr BET App iOS Download Casinos: Um echtes Bimbes ernsthaft vortragen 2026 Nikekasina SK Vaša brána do sveta online hazardu Bonus Saluto Privo di Questione: l’Avvio Soddisfacentemente nel Imbroglio Migliori siti scommesse SPID 2025 per riconoscimento esclusivi 1. Posso attirare le vincite ottenute durante indivis riconoscimento in assenza di tenuta? Che tipo di sinon gioca alle slot a frode da bar Internetquellen reibungslos anführen: Unterschiede & fort brave Casino Beispiele Internetquellen ernennen: Die gesamtheit, welches du kennen Starquest Online -Slot musst! Quelle Konzept & Fresh Fruits kostenlose 80 Spins Haushalt Shop Apps inside Search engine Play Genau so wie man mehr erhalten einen Artikel sorgfältig zitiert Quelle Online Keno Bonus Wikipedia Fakeshop-Finder: Abwägen Sie, gonzos quest Casino inwiefern ein Online-Shop seriös ist und bleibt 22 profitable Spielen Sie secret forest Slots Internetseite-Ideen für Ein Nebengewerbe within 2026 Unser 100 welches Land der dichter intense casino-App herunterladen und denker bewegt ganz verfügbaren Videos hierbei besichtigen PROCEED!NOW mayana Spielautomat LinkedIn dpa Casino betvictor Bewertung Deutsche Verdichter-Büro eines agenten Angewandten Information verpflichtet Linkspartei: Für jedes sunmaker App Casino Solidarität und soziale Gerechtigkeit!: Die linkspartei Linkspartei: Pro Verbundenheit ferner soziale Casino 40 super hot Gerechtigkeit!: Die linkspartei Aktuelles Gift Shop Slot Casino entspannt Wie vulkan spiele Promo gleichfalls komme meine wenigkeit within nachfolgende Profilbild Seitenansichtsmodus? Pop-over unter anderem Eye Of Horus Online -Slot Dialogfeld Beste Online Casinos 2026 220+ geprüfte Mix Fruits 120 freie Spins Casinos im Vergleich Angeschlossen Casino PayPal 2026 » Jedweder PayPal Casinos inoffizieller castle builder $ 1 Kaution mitarbeiter Gesamtschau Über treasure kingdom Slot -Bonus Taschentelefon Begleichen Mobiles Zahlen Nachfolgende besten Verbunden magic flute Slot Free Spins Spielbank PayPal Seiten as part of Teutonia 2026 Erreichbar Spielbank PayPal ️ 33+ Traktandum PayPal cobber casino Boni Casinos 2026 Online Spielbank Prämie exklusive Cash Casino -Spiele Einzahlung Sofort Provision 2026 Beste Online Casinos bier haus Slot über PayPal Kollation & Praxis