/**
* 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;
}
}
I en verden, hvor spil udvikler sig hurtigere end nogensinde før, er “spil uden rufus” et populært emne, der har tiltrukket opmærksomhed blandt både spillere og udviklere. Begrebet refererer til en ny tilgang til spiludvikling, hvor traditionelle begrænsninger og konventionelle metoder udfordres. En af de mest interessante aspekter ved “spil uden rufus” er muligheden for at skabe en mere engagerende og interaktiv oplevelse for spillere. Du kan læse mere om de nyttige ressourcer og strategier ved at besøge spil uden rofus.
Spil uden rufus kan beskrives som en kategori af spil, der fjerner de restriktioner og den konventionelle tænkning, som ofte præger traditionelle videospil. Dette kan inkludere alt fra åbne verdener, hvor spillere har frihed til at udforske, til innovative narrativer, der giver mulighed for flere afslutninger alt efter spillerens valg. Den kreative frihed, som denne type spil giver, højner spillernes engagement og tilbyder en mere personlig oplevelse.
Populariteten af spil uden rufus kan ikke undervurderes. Mange spillere søger i dag efter variationer, der tilbyder unikke oplevelser. Dette har ført til et væld af indie-udviklere, der udfordrer de etablerede normer i den kommercielle spilverden. Samtidig ser vi en tendens blandt større udviklere til at inkorporere elementer fra “spil uden rufus” i deres egne titler, hvilket sikrer, at de også forbliver relevante i en konstant foranderlig industri.
Warning: Cannot modify header information - headers already sent by (output started at /home/u745734945/domains/tejas-apartment.teson.xyz/public_html/wp-includes/class-wp-oembed-controller.php:1) in /home/u745734945/domains/tejas-apartment.teson.xyz/public_html/wp-includes/feed-rss2.php on line 8
Spil Uden Rufus: En Ny Dimension i Spilverdenen
Hvad Er Spil Uden Rufus?
Folkets Accept og Popularitet
At skabe spil uden rufus kræver en dyb forståelse for, hvad der motiverer og engagerer spillere. Designere skal tænke kreativt og uden for boksen, når de udvikler spilmekanikker og narrativer. En essentiel del af denne proces involverer iteration og feedback fra spillere. Mange udviklere anvender prototyping og tidlige adgangsmodeller for at indsamle feedback og forfine deres spil før den endelige udgivelse.

Teknologiske fremskridt har også spillet en stor rolle i fremkomsten af spil uden rufus. Avancerede grafikmotorer som Unreal Engine og Unity giver udviklere værktøjer til at skabe fantastiske visuelle og interaktive oplevelser. Desuden muliggør online platforme og distribution, at spil kan nå et globalt publikum hurtigere end nogensinde før.
Der findes mange eksempler på succesfulde spil uden rufus, som har formet denne nye trend. Spill som “The Legend of Zelda: Breath of the Wild” og “Minecraft” har redefineret, hvordan spillere interagerer med virtuelle verdener. I disse spil er oplevelsen ikke lineær, hvilket giver spilleren mulighed for at tage deres egen vej gennem handlingen.
Fremtidens spiludvikling vil utvivlsomt blive influenseret af principperne bag spil uden rufus. Ved at fokusere på spillerens oplevelse og engagement kan udviklere skabe dybere og mere meningsfulde spil. Dette kunne potentielt ændre den måde, vi ser på spilverdenen, ved at fremme innovation og kreativitet.
“Spil uden rufus” repræsenterer en spændende bevægelse i spilindustrien, der tilskynder til kreativitet, innovation og en ny måde at tænke på, hvad et spil kan være. Med spillere, der fordømmer konventionelle grænser og søger unikke oplevelser, kan vi forvente, at denne trend fortsætter med at vokse. Det er en tid med muligheder for både spillere og udviklere, der ønsker at redefinere fremtidens spil.
]]>