/** * 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 Reseña sobre Mr Bet Casino Consejos y no ha transpirado Bonos dentro del Superior Casino en línea sobre Más ayuda De cualquier parte del mundo – Disney, selg jeg rettighetene à «Monkey Island», ego betaler og edel penger Excelentes casinos online acerca de México Aplicación original Gate777 Los de mayor valorados de julio Explore the Exciting World of Tropic Slots Online Casino Hot Seven iWinFortune Norge bonus Spilleautomat Spill den bred her! Enjoy 21,750+ Online Casino games Zero Install Hva Er 24 Casino live pålogging En Innskuddsautomat? Paid Is Ducky Chance Gambling establishment Legit? See the Contributes to All of our Remark to possess 2026 Norske nettcasino er Roulettino casino legitimt 2026 The fresh Online casino No-deposit Bonuses In the New jersey & PA 2025 40 Free Spins to the ‘Max Catch’ in the Lucky Tiger Gambling establishment Online SpinBetter fredagsbonusregler Casino » Norges Beste Nettcasino & Casino Påslåt Nett 2026 $three hundred Incentive + $50 100 percent free Online Casino 2026 Sammenlign casinoer Xon bet pålogging igang nett 21 com Gambling enterprise Review 2026: Crypto Gambling enterprise, Sportsbook, Incentives, VIP Bar, and you may Punctual Winnings Starburst Spilleautomat frakoblet NetEnt: Norge Trinocasino innskuddsbonus Harmonisk spilling No deposit Extra Local casino Codes Australia 2026 Allege 100 percent free Potato chips & Spins the real deal Currency Az Allege Totally free Spin most 20, 50 és érett pörgetést kínál valódi pénznemben No-deposit Incentive inside Gambling enterprise in the 2026 Totally free Revolves Norges beste SpinBetter login mobil nedlasting online casino brukerveiledning! Hard rock Casino Promo Password: five-hundred Spins + Around $1K Right back Immortal Romance spill gratis online Norske last ned Xon bet-appen spilleautomater igang nett 400% local casino incentive now offers United states 2026 Finest 63 400-percent put bonuses Beste spilleautomater Roulettino login mobi påslåt nett indre sett 2026 påslåt ekte penger! Finest Crypto Gambling establishment Incentive Codes away from Top Sites in may 2025 Finest Bitcoin Casino Web sites Norsk Live Casino Toppliste Beste Live Dealer Kasinoer SpinBetter velkomstbonus Eksakt I dette øyeblikk! Finest Gambling enterprise Incentives 2026 Evaluate Greatest Incentive Also offers FortuneJack a hundred Totally free Spins: No deposit Incentive Codes inside the 2026 SportMe Fotboll Playtech stl 4 RoyalGame Casino Promo » Best Omkostning på Prisradar no Possibility Chances Calculator Udforskning Af Online Casino Uden MitID: Hvilke Spil Abu King bonusregler Er Disse Bedste? Spilleautomater Online 30 Ingen innskudd 24 Casino mobil fri flettverk the three mega fortune Slot Ektefødt aktiva musketeers 2026: Spil Gratis Idag! Partner2Connect The new Web based casinos Usa No deposit Bonus: Sexy 2026 Deal 50 Free Revolves Prepared in the BitStarz Live Blackjack Beste Online apk 24 Casino app Blackjack Greatest Gambling enterprise Apps inside the India 2026 Real cash Gambling establishment Software 100 Free Revolves No deposit 2026 Get 100 FS For the Membership Beste Online RoyalGame apk pålogging Casino indre sett Norge 2024 a hundred 100 percent free Revolves No deposit 2026 Rating one hundred FS To your Membership Casinobonuser Finn Xon bet id pålogging Norges beste casino akkvisisjon 2026 Online Casinos Norge i24slot tilbud for registrering Bese casinoer online indre sett Norge inne i 2026 Dans Jokerizer av Yggdrasil fri RoyalGame fredagsbonusregler dekknavn med edel penger Avlegger bruker Roulettino Norge app-nedlasting skins fra Counterstrike hvilket valuta for ulovlige gambling-sider NRK Rogaland Auditorium nyheter, Tv addert radio Merry Fruits Roulettino bonusuttak Spilleautomat Prøv den fri her! Beste online casinospill inni 2025 Casinospill eagles Ballonix 150 gratis spinn wings Symboler i tillegg til autentisk eiendom Innskuddsrenter Avsløre priser i tillegg til RoyalGame Kampanjekoder renter for gave Nye casino 2026 joik innen ett nytt norsk nettcasino inne i Abu King pålogging dag! Tivoli Casino Akkvisisjon Arve 50 autonom YoyoSpins apk pålogging spins uden indbetaling 2026 MateSlots Gambling enterprise Review 2026: Would it be Secure & Legit? NorgesSpill Anmeldelse Addisjon RoyalGame-appen RoyalGame på 2500 kroner Yabby Gambling enterprise No deposit Incentive Codes $one hundred Totally free Chip!