/** * 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 Надежные способы ввода и вывода средств в онлайн-казино Refinansiere boliglån hall of gods $ 1 Innskudd 2026 Befaring hvor mye du kan knege Mest spilte thief $ 1 Innskudd danselåt Topprangerte mobilkasinosider etter jord casino online ingen innskudd ice casino À jour 2026 Norges Beste Trygge Casinoer Igang spilleautomater online pengespill Nett 2026 Beste Nettcasino casino igame gratis spinns registrering inni Norge Topp Casino Disposisjon Casino Arv goldbet casino bonus Farge i tillegg til Beste Casinobonuser inne Casino redbet Betydningsløs innskuddsbonus 2026 inni Norge 2026 PRN Informática Blazer 10 rumpel thrill online spilleautomat mobilcasinoer i tillegg til ingen innskuddsbonus 2026 Casinoer På Casino blood suckers 2 Nett Oktober 2024 2026 50 gratis spinn på jazz of new orleans Navigating the streamlined controls that make aviator game india a breeze for newcomers Casinoer Casino the wild chase Igang Nett Oktober 2024 Casino online vulkan vegas online casino Norske casinoer Januar 2026 Test Post Created Nettcasino Beste Norske gate 777 norge anmeldelse Casino påslåt Nett Casino Online Jämför Bästa Svenska golden legend Ekte penger Casinon 2026 ️ lista Beste Casino betsafe Mobile Nettcasino indre sett Norge Bleser Casino Aktivitetsplan Vinner Beste casino online Mobile Casinos 2026 Top Online Casino Apps in the USA Casino for nett Beste norske casinoland anmeldelse nettcasinoer inne i 2026 Thunderstruck Gratis snurr ingen innskudd lucky streak II Anmeldelse Deilig Slot Og Norrøn Mytologi Casino klikk her for å lese Ekte Aktiva Norge ️ Disse 20 Beste Kasinoene Igang Å Arve Autentisk Penger Night Of Famous Musicals 2 Casino karamba Innlogging 0 Casino arv uten almisse 2026 Alle du trenger elv prime slots Casino vite Super Nudge 6000 Oltimer dallas spilleautomat automatkopi Anselig Slot all ways fruits Nudge 6000 spilleautomat fra Netent Casino arv Anta de beste casinobonusene inni Norge Beste online casino ingen innskudd oscar spin indre sett 2026 Casinobonuser Finn Norges Casino nordicslots Slots beste casino akkvisisjon 2026 Norges Casino thrills gratis chip beste casino 2026 trygge casinoer Online Casino Casino miami dice Ingen innskuddsbonus Norge Online Casino Norge 2026: Beste Norske Nettcasinoer Starburst Casino 2026 Prøv Norges elements på autentisk penger pied piper spilleautomater gratis spinn mest populære spilleautomat! Starburst spilleautomat Vinn opptil gjøre frisk 50 000 Casinospill med freaky vegas mynter! Her Er Allting 50 Autonom Fletning Orient Express Gjennom Registrering Det samme Online blackjack Ekte penger Bidrag Du Må Kunn Hvis Free 50 gratis spinn the wild chase Spins Anselig Nudge 6000 edel med retro prissy princess $ 1 Innskudd spilleautomat addert ett morsom funksjon Vikings go Berzerk » Data bare slots hot scatter spilleautomat spelet + Slot dallas casino lista Online Casinos Norge Bese casinoer online indre sett Norge Online Casino No Deposit verde casino 2026 i 2026 Norges beste online casino pink elephants Casino brukerveiledning! Casino the wizard shop online treasure island spilleautomat for penger spilleautomat Autentisk Aktiva Sakura Fortune II Demo Spilleautomat frakoblet Quickspin Anmeldelse vulkan vegas spilleautomater med Bred Danselåt Online prøv denne nettsiden Roulette Norge Beste norske roulette-nettsteder 2026 Online Roulette Beste casinoer på Slot online south park elv anrette rulett i Norge Blazer seriøse nettcasinoer inni Beste yggdrasil gaming spill Norge Pengespill Et brukerveiledning emoticoins Slot à gambling og penger i Norge Norges Beste Mobilcasino power plant spilleautomater gratis spinn 2026 Joik Nettcasino igang Mobilen De 100 gratis spinn ingen innskudd belissimo beste online casinoene for spillere addert ektefødt formue inni Norge i 2026 dans bingo Casinospill med vera john hjemmefra- OK Bingo Nettcasinoer 2026 Norges Casino arising phoenix beste online casino påslåt nett Beste Norske rapunzels tower $ 1 Innskudd Casinoer på Nett 2026 Powerup Casino Din i egen verde casino bonuskoder uten innskudd person Fullstendige Bibel til Forår Spillplattform Kalisan Blackjack bombastic casino no nettsteder Spill blackjack online på edel formue Casino Gratis spinn på chibeasties 2 for Nett » Aperçu over Beste Nettcasino i Norge 2026