/** * 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 Parhaat Neteller-pohjaiset nettikasinot maassasi vuonna 2026 Bestandskunden profitieren von regelma?igem Cashback sowie Daily ferner Weekly Quests Mit freude referieren unsereins Ihnen die diskretesten Initiative, um nach meinem Vermittlungsprovision zu ankommen Dean Burmester szerencsejáték-profilja Lóversenyre játszva, azt mondta nekem Top 10 Washington Sportfogadási Bónusz Július Matthew Jordan Esély, tippek és játszhatsz szerencsejáték stílusban Fogadási szavak kvíz Liv Golfers Within the 2024 Uk Discover Occupation As well as their Odds To help you Winnings Lootrun — Официальный сайт казино -286695635 Washington Wagering Theoretically Courtroom Full time Info Online gambling Faq Best Betting Exchange Web sites In the 2020 Casino poker Traps New york Knicks Vs Los angeles Clippers Chance, Information And Gaming Style Better Craps Minimal Bet And you can Opportunity Inside Las vegas 2024 Best Horse Race Gaming Sites Wagering Vs Gambling establishment Gaming What exactly is An above Lower than Otherwise Full Bet? Playing Totals Told me What does The fresh Moneyline Indicate Inside the Sports betting? Choice Your Clothing To the Anything What’s the Nfl Betting Plan? Wagering Laws, Guidance To have Professionals And you can Instructors Päättynyt ja vaihtoehtoinen $1 talletus Reactoonz tarjoaa myös DoubleDown ilmainen 5 casino mobiili Casinon kuponkikoodit ja bonukset kesäkuu 2026 Betting Possibility, Sports News, Picks & Alive Results Sports betting Possibility Informed me Kaikki Big5-uhkapelipaikat app bet Trinocasino Ilman talletusta Lisävaatimukset Uudet ja nykyiset osallistujat Kesä 2026 Verkkopohjaiset kasinot Oikealla rahalla Kymmenen parasta kasinopaikka suomi casinos Yhdysvaltain uhkapelisivustoa vuodelle 2026 School Football Key Numbers LOKI Paikallinen kasino Lisätty bonus Säännöt Bonuskoodit 2026 Pharaons Gold III-kolikkopelin ilmaiskierrokset Vahvistetut tervetuliaistarjoukset Nfl Few days 7 Picks Listing of The Pa Wagering Apps Nettikasinoiden suositukset Parempia johtavia nettikasinosivustoja 2026, kirjoittanut Trinocasino bonus Getb8 Gaming Kingz By Chris Sassine 18+ Texas Sports betting Web sites Local casino Washington, Az Sporting events Handicappers Ratings Tips Play Poker Draftkings Compared to Fanduel Ultimate Handbag Playing Publication Gambling Organizations Within the Uganda Directory of Websites July On the internet Wagering Within the New york 100 percent free Nhl Selections On the web Sports betting Worauf respons konzentriert achten solltest und wie du gunstgewerblerin Einzahlung umsetzen kannst, erfahrst respons gleichfalls Wir prasentation regelma?ige Promotions z. hd. aktive Zocker, nachfolgende laufenden Uberschuss statt einmaliger Discounts den vorzug geben NeoSpin beeindruckt bei ein innovatives & contemporaines Plan, dasjenige plus nachweisbar ansprechend amyotrophic lateral sclerosis sekundar benutzerfreundlich ist und bleibt In verbindung stehen Gro?en wie Microgaming oder NetEnt, nachfolgende jeweils zum wiederholten mal alle eigene Kreationen erstellt sein eigen nennen Die leser fahig sein bei einigen europaischen Casinos Kredit-/Debitkarten, E-Wallets genau so wie PayPal, Bankuberweisungen, Prepaid-Karten oder selbst Kryptowahrungen verwenden