/** * 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 Najlepsze Automaty w Przedsiębiorstwie Hazardowym Online: Kompleksowy Przegląd Live Spielbank Brd ᐉ Tagesordnungspunkt 10 Live Casinos 2025 50 Dragons Slot Remark 2026 100 bonus slot wild west chicken percent free Gamble Trial أسهل الكازينوهات على الإنترنت في الولايات المتحدة الأمريكية خلال عام 2026 Erster Spielbank Prämie Österreich August 2026 im Kollationieren Casinos über schneller Ausschüttung Free internet games at the this site Poki Gamble Now! Beste Angeschlossen Blackjack qua Echtgeld Ostmark: 10+ Casinos 2026 Raging Rhino 100 percent free Harbors Play On casino big ben the internet Slots Die besten Live-Blackjack-Online-Casinos in Deutschland 2026 Blackjack für nüsse aufführen 2026 Kostenloses Angeschlossen Blackjack No deposit Extra Codes Current Number the love guru slot games for AUS 2026 Real connections await: a comprehensive guide to dating on Asian Date IT-Meldungen, Neuigkeiten und Hintergründe Bezpłatne gry internetowego nv casino graj smacznie uciechy dzięki komórkę jak i również Pc Bestes Angeschlossen Spielsaal Echtgeld in Land der dichter und denker Geldspiele Sign Up at BigLucky Casino Best New Player Deal for Czech Angeschlossen Spielbank Maklercourtage exklusive Einzahlung August 2026 Provision Codes für jedes Echtgeld Startguthaben Auf anhieb, No Anzahlung Neue Online Casinos 2023 Offizielle Verkettete liste für Land der dichter und denker Better A real income Online casinos 2026 Professional Tested 400% deposit bonus casino and Analyzed Top 12 Echtgeld Casinos 2026 Unabhängig getestet & bewertet Neue Verbunden Casinos inoffizieller mitarbeiter Monat des herbstbeginns 2026 Die Tagesordnungspunkt Verzeichnis Best Online casinos Real money Betting Crystal Forest slot machine Web sites to have 2026 Hyperlinks: Arten, Oberbau & Best Practices USD Icons: Copy, Insert, and you can Keyboard casino greatblue Guide on the Dollars Signal 50 No-deposit Totally free Revolves In the Web based book of ra slot machine casinos Greatest 2026 Now offers Mybet Casino Erfahrungen: Religious 100 Prämie beschützen! 2026 Step-by-Action Guide on how best to Check in at nv casino Ignition 5 Finest Basic 10$ deposit casinos Put Casino Bonuses: Greatest Provides for to help you eight hundred% for people Participants Mr Green Prämie » 2 Codes & Kupon bloß Einzahlung Finest 50 Free Spins No deposit Incentives On the web no deposit bonus codes slots 2026 Verbunden Casino unter einsatz von Live-Tischen No-deposit Incentive goldbet canada Requirements & Offers Checked out August 2026 Mr Bet Kasino Maklercourtage ohne Einzahlung beibehalten 50 FS Mr Bet Spielsaal App: Das beste mobile Spielbank, um echtes Bares dahinter obsiegen Ignition Gambling enterprise also provides a little yet fascinating live dealer area in nv casino which you can enjoy this type of game having a financed membership The brand new Web based casinos Usa secret of nefertiti $1 deposit 2026 Newly Founded Internet sites An informed Bitcoin Gambling enterprise Sites Bitcoin casino luxury mobile Betting Book mybet Spielsaal Lizenziertes Online Spielsaal No-deposit Bonus Casinos & Coupons to own casino betfred login August 2026 Nachfolgende besten Angeschlossen Casinos within Brd 2026 Lucky Days Casino Erprobung LuckyDays Provision 1000 + 100FS Slottyway Gambling casinos4u casino bonuses enterprise Promo Also provides Luckydays Casino-Login within Teutonia: Einfacher -Zugang ferner sichere G Fruitinator nv casino Slot Machine Lucky Days Casino Angeschlossen Alpenrepublik: Willkommensbonus, Spiele & mobiles Vortragen Lucky Days Bonuscodes & Aktionen 2026 De Kracht van Turinazol 10 Mg in Bodybuilding Daten Zu Ipados nv casino 15 Best No-deposit Incentive Gambling enterprises in australia 2026: Best Aussie Casinos that have Free free spins no deposit goldbet Revolves & A real income Gains The brand new Requirements