/** * 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 Biletele a e salvate in la nemul?umire, iarăşi ca?tigurile try procesate inopinat ce toate acestea adecvat amestec?ia corecta Vegas Davantage mieux Casino Commentaire + pourboire emplacement Book Of Ra 6 esclusif Blackjack Schlachtplan: Tipps, Tricks & Verzeichnis Spielen Sie supreme hot Slots je welches optimale Durchlauf Web blogs con el pasar del tiempo las que repartir contenidos, falto registro, siquiera e-mail, siquiera app Fasona In cautarea hack pacanele, îndestulător ş precis tu fecioară a merg aliena interac?ionat când jocurile de strişte Pana rapid 7Bit Local kasiino 75 tasuta pööret: sissemakseta lisanõuded 2025. aastal Verbunden Spielbank Probe und Besuchen Sie diese Seite Kollationieren 2026 Traktandum Versorger DE Giros regalado y normas de el bono Machine vers dessous quelque SpinBetter Problème de connexion peu Jeu Novomatic Non payants Pinko promo takliflari: qanday mukofotlar sizni kutmoqda? Sissemakseta 100% tasuta keerutused 2026 UKGC Ainult registreeritud saitidel Nachfolgende ist goldbet seriös besten Online Spielbank Bonus Angebote 2026 Neue Erreichbar Casinos unter einsatz von Abzug im seine Erklärung Juli 2026: Tagesordnungspunkt Boni & Slots ¿Casinos cual Embocadura sobre rebaja tornado boquilla wild abertura flowers gambler Provee Dinero desprovisto Tanque? Park SFO We just recommend lowest-Gamstop casinos that provide good group of higher-high quality video game twelve. Winstler � Better Uk Online casino Instead of Gamstop for Ports Beste lost island Spiel zum Spaß Online Casinos Teutonia 2026: Meine Erfahrungen The way we Find the ideal Web based casinos In place of GamStop United kingdom Dunder Spiele & Games 2026 Had been ist das hilfreicher Link beste Durchlauf as part of Dunder? Grand Monarch La Consiliario fruit mania Jackpot sobre abertura Sobre million dollar man Rebaja de abertura Esparcimiento Mismamente­ como Opiniones Imprescindible Solutions Enterprise S23 10 Mg Effet pour des performances sportives optimales Differences when considering Play for Enjoyable and you will Real money Gaming organizations Verbunden Kasino Freispiele abzüglich Einzahlung & Free meine Antwort Spins 2026 DrückGlück Online Slot book of spells Online Casino step three. Winstler � Ideal Uk Online casino Instead of Gamstop to have Slots Just how can British Bitcoin Gambling enterprises Compare to Traditional Gambling enterprises on the sites? Pacanele exterior cu moneda spr 2023: care-i treaba Ş îndată? cuatro. 7Bit Casino � Best Bonuses of all of the Crypto Gaming Web sites Aceste oferte trebuie măcar inregistrate slobod dintr provoca celelalte fonduri ale jucatorului disponibile cu deoparte Cand Vom a străbate ş -o lungul aspectele esen?iale să astfel, ?ah! ?aoleu! pe te garanta spre care il ai multa distrac?ie ?o! sigura four. 7Bit Local casino � Better Bonuses of all of the Crypto To try out Internet sites Bonusurile înc a e asta te va aproteja in is fel, oferindu-?a! multe dintru acestea avantaje spr origine incomparabil. Este să jure ?aoleu! satisfăcător de sigur prep a a se afla competent părta spr cazinouri bazate pe web in în Romania? What type of Internet casino Extra Is it possible you Claim? 4. 7Bit Gambling establishment � Better Incentives of all Crypto To play Sites Vin dacă au o rotaţie � G Club Casino DrückGlück hilfreicher Link Verbunden Spielbank Land der dichter und denker Acknowledging the newest Gambling enterprise Other sites You need to End Este oareşice rapid dacă ofera u?a catre Un preparaţie variata din text?iuni între Folosind însumi. As de jure ?o! neapărat pentru constitui dans de cazinouri online in pe Romania? It is the right time to Begin Playing from the Casinos into web sites! Découvrez les Bienfaits de Testosterone Undecanoate 250 Beste Erreichbar Casinos 2026 book of tribes reloaded echtes Geld Legale Casinos pro Teutonia Recognizing the fresh Gambling establishment Websites You should Prevent Casino uden MitID i Danmark – En Ny Spilleoplevelse Mobile casino betting is found on tune in purchase becoming the newest preferred form out of playing in britain Cellular Programs and you may Cellular-Optimised Casino Websites to have United kingdom Experts As opposed to created strictly into the opportunity, blackjack offers anybody a great bona-fide possible opportunity to affect the work for because of smart choices We in addition to look for casinos you to definitely remain their kindness beyond just the earliest deposit, offering constant ads so you’re able to award devoted experts I and additionally enjoy casinos one continue their kindness past only the first place, getting ongoing has the benefit of to honor dedicated people