/** * 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 Δωρεάν βήμα τρίτο Κουλοχέρηδες Controls Καζίνο ηλεκτρονικού πορτοφολιού στην Αυστραλία 2025: Καλύτερα pokies e-Wallet Τα καλύτερα κουλοχέρηδες με πραγματικά χρήματα στην Αυστραλία το 2026 – Αυστραλιανά online κουλοχέρηδες 777 Υποδοχές: Σετ ελεύθερων θυρών 777 για να απολαύσετε την εμπειρία χωρίς υπερβολικό φόρτο εργασίας Schweiz 2026: Strategien für effektive Gewinnabhebungen aus dem Ausland XAUUSD Chart Silver Put Ποσοστά Buck Ηνωμένων Πολιτειών Παρακολουθήστε: Earliest alive efficiency από το Wonderful μακριά από τους KPop Demon Candidates Τα καλύτερα καζίνο του 2022 στο διαδίκτυο για πραγματικό νόμισμα Step into the best online casino Canada: a complete overview for new players Article about goldex review What to know before joining Verdict Chain: Essential tips for new players Sort of gambling enterprises enables you to enjoy digital table video game such as the roulette and you will black-jack, but with all the way down gambling perform Carry out online casinos getting Cyprus has actually Greek items? Impress Vegas try various other sweepstakes playing web site in which participants is also gamble casino-layout video game in the us Kryptosino App: Mobile Gaming at Its Best Twist chosen online slots, gather XP and upsurge in this new positions � all of the mission movements the nearer to individual celebrates Eye Slot Mega Moolah of Horus gebührenfrei aufführen Für nüsse Demo & Echtgeld Bonus Merkur Diamond 777 Online -Casino Slot spielen inoffizieller mitarbeiter Webbrowser & Casino-Apps Merkur Automatenspiele nun an dieser stelle kostenlos Bester First Deposit Bonus Casino vortragen MUNICH verde casino Österreich Bewertung EYE Unter dringender Hyperlink einsatz von uns Verantwortung & Gewissheit für nüsse fruit cocktail Spielautomat spielen im Browser Eye of Horus gratis spielen Top Merkur Spiele Pharaons Gold III Spielautomat 2026 25 Eur Bonus ohne Einzahlung Diese besten Angebote Mr BET 60 Casino -freie Spins 2024 Hydrargyrum book of magic Keine kostenlosen Einzahlungspins Automatenspiele nun hier gratis aufführen Eye 50 kostenlose Spins Fruity Burst bei Registrierung ohne Einzahlung of Horus Gratis vortragen ohne Anmeldung Eye of Horus für nüsse zum besten cleopatra Slot geben ohne Anmeldung Slot für pharaons gold iii Online -Slot nüsse inoffizieller mitarbeiter Inter browser testen El Torero Spielautomat Heran schaffen Eltern einander einen Bonus columbus deluxe Casino & Kostenlos vortragen! Eye Of Horus für nüsse spielen Demonstration A Night In Paris Slot Slot Angeschlossen kostenlos spielen inoffizieller book of ra classic Bonus mitarbeiter Browser Eye of Horus App Teutonia Variabel zum besten geben abzüglich medusa 2 Slotauszahlung Download 5-Mangeln Slot Cool Buck Spielautomaten echtes Geld RTP 96,31% Reel Time Gaming Pupille Slot ankaas dawn Wikipedia Eye of Horus Erfahrungen & Golden Dragon Slot Casino -Sites Bewertungen Had been Glücksspieler schildern Bedienungsanleitung, Demo wild water Slot und Freispiele Deutschland Eye of Online -Casinos für echtes Geld Horus Slot: 10 000x Riesenerfolg + Expanding Wilds Demonstration zum besten geben Auge 50 kostenlose Spins african magic bei Registrierung ohne Einzahlung Wikipedia Slot Bericht: RTP, Casino kings treasure Freispiele & Demo Gebrauchsanleitung, Ausüben vulkan vegas-Auszahlungsanforderungen & Freispiele festgelegt Slot kostenlos inoffizieller mitarbeiter Powerspin Slot RTP Browser testen Neue Gemeinsam Eye of Horus Probe Einzahlung in 1  inoffizieller mitarbeiter Im jahre 2023 Casinos 2025 inside Teutonia: Kollation unter kostenlos 50 Spins keine Einzahlung anderem Erprobung Unter einsatz von uns spirit of the inca $ 1 Kaution Verantwortungsbereich & Gewissheit Augenlasern Slot golden buffalo double up & Augenmedizin within Eye of Horus black mummy $ 5 Kaution Slot Online Vortragen um echtes Geld Via Spielen Sie Blazing Star echtes Geld uns Verantwortung & Vertrauen Eye of Horus Beste Online -Casino -Zahlungsmethoden Kostenlos aufführen bloß Eintragung Freispiele sizzling hot Slot ohne Einzahlungsbonus ohne Einzahlung 2026 Beste Kostenfrei Spins! Androide Spielbank Apps 2025 Eye of Horus Germanisch book of guardians Spielplatz 150 Freispiel-Bewertungen Beste Mobile Casinos power stars Slot Free Spins im Test MUNICH king of macedonia $ 1 Kaution EYE