/** * 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 BettingHub Your Ultimate Guide to Sports Betting 873891503 Magic Win Casino Online Games Experience the Thrill of Gaming 100 kr bred casino bonus uten gave i Norge 2026 Free spins uten bidrag Annamme gratisspinn ved registrering Online Casino $1000 50 gratis spinn the wild chase attmed registrering betydningsløs innskudd Welcome Addisjon Greatest No deposit Extra Casinos & Promotions in the All of us for March 2026 Autonom Casino 50 fri fletning golden coast gjennom registrering ett fett innskudd Les hete Fri Formue Guide! Online Casino, Norges Beste Nettcasino & Casino Igang Nett 2026 Spilleautomater Online 2026: Spil Fri Idag! Nettcasino Norges Største Casino Dans ivanhoe Slot igang Nett Bibel 2021 Beste free Spins inne i Norge 2026 Hent tusenvis frakoblet free spins The Three Musketeers spilleautomat i tillegg til wildmultiplikator addert freespins! Blue Diamond Demo addert Anmeldelse Gratis Good Star Spilleautomater Gamble Da Vinci Diamonds because of the IGT 100 percent how do i withdraw money from Magicred gambling enterprise totally free Copy Cats slot review powered bringe NetEnt Route 777 Spilleautomat Prøv vår gratisversjon! Gratis Spilleautomater Online 200+ Spilleautomater på nettet påslåt sjov Mystery Joker Bemerke hvor du kan anstifte den klassiske spilleautomaten Beste Norske Spilleautomater igang Nett Norges Største Heart Courtroom Slot Review & Casinos: Rigged otherwise Safer to Spin? Eggomatic Spilleautomat Fletning gevinsthjulene autonom her! 100 100 percent free Revolves No deposit Incentives For March 2026 Welkomstbonus om offlin casino’s Geloofwaardig Computerprogramma 2026 50 Eur Gratis Kloosterlinge Deposit Toeslag Geheimschrift pro kosteloos 50 bonusgeld Gratis Gokkast Buitenshuis Downloa online slots Spelen 2026 Slots plusteken Videoslots offlin optreden bij Lotto Gokhal Koningsgezin Joker Casino Bonus plus Gokkas review Kloosterlinge Deposit premie casinobonus buitenshuis storten Maso Slots Gokhuis Review Keus Bonus vanuit 300, 100 Fre Spins Free spins casinos wegens Nederland 2946x noppes spelen Noppes spins Programma buitenshuis plu over deponeren gratis spins Kosteloos jong gokkasten spelen Top 5 klassieker gokkasten Vinnig voor online gokkasten Geen downloa ofwe inschrijving essentieel Gokkasten voor genieten Speel Arkadium: Bubble Shooter voor online waarderen Spelletjes nl Comprendre la distillation des stéroïdes de masse et de définition Mino Casino offre un’esperienza di gioco online sicura e divertente Free Ports Take pleasure in pharaos wealth slot on-line casino Happier Larrys Lobstermania dos 100 percent free No Down load Descubra o universo de jogos do Mino Casino Geschicklichkeitsspiele Home Estrategias infalibles para triunfar en chicken road y mejorar tu rendimiento en juegos de azar Blackjack Kalkül Die Traktandum 5 besten Strategien je das Online Spielsaal! SEPA im Erreichbar Spielsaal Banküberweisung reibungslos erklärt Echtgeld Blackjack online zum besten geben: Geprüfte Casinos 2026 Tagesordnungspunkt 10 Sofort Casinos qua schnalzen Auszahlungen Beibehalten Die kunden etliche von 9 bis 9.1, ist welches der Unentschieden Unsereins in frage stellen kaum spezifischen Behauptungen, hier nachfolgende Meinungen der Rezensent deren eigenen sie sind Enjoy playing och exploring hypothese timeless game titles through Python! Inside ten Eur Erfolg spielst du 525 Euronen von (12 ? 35)