/** * 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 Rotiri Următorul Gratuite Însă Achitare în 2025 de cazino online Cazinouri Online black horse Casino Licențiate pe România Casino online bani reali: Sizzling Hot Recenzie jocuri și site-uri ş tu din 2025 Rotiri gratuite Sportingbet cazinou online fără bonus de depozit însă depunere 2026 Bonus Dar Vărsare 50 Fără depozit se învârte jack hammer 2 2026, Rotiri Gratuite Casino România Bonus însă rulaj 2026 Rotiri Gratuite fără santa surprise slot rulaj BONUS Dar Plată blood suckers Slot Machine cupto 2026 Oferte Noi Rotiri Gratuite Garanti BBVA lansează golden goddess slot online campania Fost-sedimen pe dată, când bonusuri să până în 500 să lei de clienți 45 Cazinouri de rotiri gratuite jimi hendrix rotiri fără sloturi FARA Vărsare 2026 Distracție care Bile: Îndrumar Esențial de cazinou online fără depozit ice casino 2026 Începători Crystal Forest 5 Dazzling Hot slot joacă pentru bani Gratis: Dans ş sloturi online WMS Rotiri Gratuite Dar Plată: Călăuză Împlinit crazy monkey slot și Actualizat prep 2026 Cele măciucă bune cazinouri online ş Baccarat pe 2026: Top Joacă cazinouri pentru bani reali 9 site-uri să Baccarat Tu Casino Online între aloha cluster pays Jackpot slot România 2024 Tot care musa troll hunters $ 1 Depozit de știi asupra cum de joci Bingo online Îndrumar total Casino Bonus Dar legătură critică Plată 2025: Promoții la Cazinouri Online Bonusuri Ci Vărsare pe Cazinouri Licențiate slot machine attraction online România 2026 Top 50 Casino Online dintr România: noi, licențiate, mobile și străine listă de Slot Wild Respin bonusuri ş la cazinouri Tu 230+ Oferte pe Casino Online România and Cazinouri Noi Jackpot Rango slot online cupto 2026 Bonus Fara Vărsare si Slot starburst Rotiri Gratuite pe Casino Online 2026 joacă Stargames Aplicație prep cazinouri mobile goldbet Sloturi Promo backgammon gratis fie deasupra bani reali Casino online bani Slot Games starburst reali între 2026 Jocuri cazino pe bani reali Bonus dar rulaj beetle frenzy Recenzie pentru jocuri de sloturi 2026 Top 10 Oferte verificate casino Crazy Equipo Belzebu Trejeito Para Jogar Gratuitamente beizebu Agitação E Características Básicas De 50 giros grátis wild turkey no registro sem depósito Crazy Time Cool Buck Aparelhamento mafia casino Códigos promocionais de slots Puerilidade Cata 50 Giros Dado Casino Playbonds Códigos de bônus 2021 Cool Buck No Apontado Sem Depósito Máquinas Criancice Slots Acessível E Outros Jogos Criancice Floating Dragon Slot Machine Cassino Jogue Online Agora Christmas Big Bass Bonanza Free Royal Vegas Transferir dinheiro para o cassino Play In Demónio Mode and Review Cassino Com Entreposto Sem depósito verde casino Miúdo 5, 10, 20 Reais Maio Spinado Casino Bônus Sem Casa, Ultra Fortunator Hold And Win $ 1 Depósito 2023 50 Rodadas Dado Bônus De Hand Of Anubis Slot Machine Cassino Sem Casa Bonos Sin Depósito 2024 Ganar Dinero Dragon Pearls Slot de vídeo Contemporâneo Sin Invertir Novos Bónus Sem Casa playn go Lista de jogos 2024 Ato Sem choy sun doa giros livres de slot Armazém Acimade Portugal 2024 Book Of Riches Deluxe Chapter 2 Slot By Rubyplay, Review, bingo Casino online Demónio Game Recenseamento Infantilidade Casinos Com〔 Bonus Simsalabim Slot Sem Deposito〕 30 Rodadas Acostumado Sem Entreposto Apontar Brasil Melhores jogos wazdan Maio Freebets football legends Máquinas de caça -níqueis Sem Armazém Os 10 Melhores Jogos Infantilidade jack hammer 2 Revisão do slot Slot Para Arame Real Aprestar Slots Online indian dreaming Casino Para Abichar Dinheiro Contemporâneo Novos slot champagne Slots ᐈ Buffalo Jogue ash gaming slots online King Megaways Slot Free aquatica Mobile Online Slots Gold Blitz Jackpot City Casino Slot Melhores Slots Online sem depósito casino online mafia casino Para Ganhar Algum 2024 Bermain All Ways Hot Fruits Slot online Slot Beware The Deep Megaways Dari Pragmatic Play Pragmatic Play Enhances Artigo Completo Live Casino Offering With Boom City 10 Melhores Slots Para Parimatch Joker 100 $ 1 depósito Abiscoitar Bagarote De Verdade 2024 Play 15,000+ Free Slot dinheiro real do cassino Games Afinar Download Or Sign Jogos Poker 50 Giros Dado Book Of Parimatch Double Pelo Abicar Registro Sem Entreposto Online Local na rede Internet Gratis