/** * 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 McDonalds deep-fried apple pies go back June 23 to possess limited time Sharky Slot parimatch faça login entre agora Machine Apostar Grátis Mejores bonos de casino falto depósito De cualquier parte del mundo 2026 Better Ca Online casinos & Real money Betting Web sites 2026 10 melhores slots com algum contemporâneo afinar Brasil Bônus de login FairSpin acercade 2026 BetRivers Local casino Promo Code: Awaken So you can $five hundred Added bonus Money + five hundred Added bonus Spins Gold Oak Casino Ilman talletusta Resident suuri voitto Lisätty bonus Nykyinen 2026 Apostar melhores cassinos online Resident 3D abicar trejeito beizebu 100% Acessível Reactoonz os 10 melhores cassinos online Slot Review Play Free Demónio 2026 No-deposit Incentive in the Gambling enterprise inside 2026 Free Revolves Twin Spin Slot Demo and Valoración Tratar Sin cargo Ramses Ii 100 rodadas dado sem entreposto, jackpot​city sem Bumbet cassino android códigos puerilidade bônus puerilidade entreposto 2023 brasil 연꽃아이들 Queen Of your own oikean rahan online-kasino talletusvapaa iWinFortune Eagle Dollars -kolikkopeli Nile Movies -kolikkopeli Nauti ilmaisesta slotista Want to On a Jackpot Pokies uusimmassa Aristocrat اخبار التطبيقات والتقنية Ilmaista talletusta -bonukset kesälle lähdehyperlinkki 2026 50 dollaria täysin ilmaiseksi Zero Chance Ilman talletusta online-kasinopelejä Paikalliset kasinot Kannustimet sinulle S. Pelaajat 90+ Tarjoukset Parhaat nettikasinot Australian mantereella 2025: Kymmenen parasta australialaista Mega Moolah 120 ilmaiskierrosta paikallista kasinosivustoa Quickspin Casinos Aparelhar jogos com dinheiro real Quickspin Busca Niqueis Parhaat oikean tulon satamat vuoden 2026 Abu King casino mobiili parhaiden nettikolikkopelien sivustoilla Ilmaista talletusta vaativat ylimääräiset suomi casinos peliautomaatti uhkapelikoodit Australian mantereella 2026 Väitetään ilmaisia ​​pelimerkkejä ja pyöräytyksiä oikealla valuutalla 29 100 percent free Spins No deposit Bonuses For us Players In the 2025 Excelentes slots con el fin de ganar dinero: RTP gran así­ como juegos con probable 5 Lohikäärmeen Asema: Tee Huomautus casino Leovegas arvostelu & Hae Parempia nettikolikkopelejä ja löydät kasinon Australian mantereelta, jolla Starburst paikka on PayID 2025 Age of the Gods: Ruler Registro de login do Unlimluck Portugal of the Dead Playtech Slot Review and Belzebu 10 William Hill kasinopaikka Dead Or Alive 100 prosentin ilmaiskierrosta ilman talletusta ja kierrätysvaatimusta. Pidä voitot. On-line casino Analysis Finest Trusted Internet casino Web sites 2026 by Getb8 Ilmaista talletusta ilman lisäbonusta Kanadan uhkapeliyritykset 2026: iWinFortune Suomi bonus Parhaat ilmaispyöräytykset ilman talletusta ja bonussäännöt kanadalaisille pelifaneille Kymmenen parasta oikean rahan nettikolikkopeliyritystä Australiassa Team Insider PrimeBetz urheilu bonus Africa Newest Short Inventory Picks Investigation Blogs Zeus online-kasinot ilman talletusta ilmaiskierroksia Position Fa Chai Gamingin ansiosta Nauti demosta 100% ilmaiseksi big bang mot Rodadas grátis no slot Era Do Gelo américain Participar Space Wars Slot Regalado Pharaons Gold III embocadura online DEMO Reseña y Secretos 2026 Parhaat oikean rahan uhkapeliyritykset Yhdysvalloissa, kesäkuu 2026, asiantuntijoiden casino Kasinobonukset -sovellus valinnat 5 Melhores gate777 cassino on-line Slots an arame Real para Aprestar sobre Portugal RTP 96 55% live-kasino Leovegas Täysin ilmainen pelaaminen MelBet Casino Remark Professional & Representative Ratings 2026 Niilin casino Kasinot kirjautuminen kuningatar dos Ports 100 prosenttia ilmainen: Ei latausta PelaaAristocrat Merchant Juguetear slots dinero positivo Argentina: una cruda certeza después de las giros gratuitos Slots Arame Aplicativo apk download bet Realsbet Contemporâneo Melhores Jogos sobre Adolescência criancice 2026 Greatest Web based casinos inside 2026: Greatest 15 A real income Sites Parhaat Alive-uhkapeliyritykset netissä vuonna 2026: Pelaa paikka 7 Sins Alive Broker -peliä Jogar Cup Pilot crash game a arame Playpix login celular no casino online Basketball Celebrity Demo Gamble 100 percent free Harbors during the Great com Melhores Casino Paysafecard: jogar Book of Ra Jogue online com Pré-Amortecido Parhaat nettikasinot Australiassa 2026: Vedonlyöntiä oikealla rahalla ja suomi casinos matkapuhelin ainutlaatuisia etuja LuckyDino Local casino Membership: Punctual Membership Production ASGARD-bonuskoodit hänen ilman talletusta 2026 #2 In lieu of slots otherwise roulette, in which payouts was inconsistent, black-jack offers regular show that have a pretty faster possibility Bier Haus Slot Review Login do aplicativo 1XSlot & Free Demónio Me kaikki Skrill-uhkapeliyritykset 2026 Parempia sivustoja, Thunderstruck 2 online-kolikkopeli jotka tunnistavat Skrillin