/**
* 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;
}
}
The post Uden om Rufus En Dybere Udforskning first appeared on .
]]>
Rufus er et populært emne blandt både spillere og udviklere, men hvad sker der egentlig uden om ham? I denne artikel vil vi tage et nærmere kig på de mange forskellige aspekter af spilverdenen, som eksisterer i skyggen af det velkendte navn. Læs videre for at opdage, hvordan uden om rofus spil udenom rofus kan give dig nye perspektiver og erfaringer.
Rufus kan referere til mange forskellige ting, men ofte associeres navnet med en specifik karakter i spil, der har fået stor popularitet. Denne figur repræsenterer ikke kun en del af historien, men også et fællesskab af fans, der deltager i diskussioner, fanfiction og kunst, hvilket fører til en dybere forbindelse til universet. Men hvad med dem, der ønsker at udforske mulighederne uden om Rufus?
Uden for schablonen af Rufus findes der en verden af alternativ spildesign. Mange uafhængige udviklere arbejder på kreative og innovative projekter, der ikke nødvendigvis relaterer til de mainstream koncepter, som Rufus repræsenterer. Dette skaber en række spændende muligheder for spillere, der søger noget anderledes.
Der er en række aktive fællesskaber, der fokuserer på games uden for Rufus-universet. Disse fællesskaber består af entusiastiske spillere, der deler deres erfaringer, giver feedback til udviklere og blomstrer i kreative diskussioner. Det kan være en fantastisk måde at opdage nye og ukendte titler, der kan berige ens spiloplevelse.
Spil udenom Rufus kan også ses som en bredere udforskning af forskellige genrer og spiltyper. Der er et væld af niche-genrer, der tilbyder unikke mekanikker og spilleroplevelser. Fra roguelike til narrative eventyr, den uendelige variation i spilverdenen åbner op for nye måder at interagere med medierne, som mange spillere aldrig har prøvet før.
Independent (indie) udviklere spiller en central rolle i at skabe spil uden for de etablerede konventioner af store virksomheder og klassiske karakterer som Rufus. Disse udviklere har ofte friheden til at eksperimentere med idéer, som store studier vil betragte som for risikable. Dette føre til unikke og ofte banebrydende spil, der udfordrer spillernes forventninger.

Et væsentligt aspekt ved spil uden Rufus er det sociale element. Mange af disse alternative spil fremmer samarbejde og interaktion mellem spillere i forskellige former. Dette kan være gennem co-op gameplay, multiplayer konkurrencer, eller endda online fællesskaber, hvor spillerne kan udveksle tips, tricks og erfaringer om deres rejser.
Mange spil uden om Rufus har en øget fokus på dyb og meningsfuld fortælling. Denne narrativ tilgang kan tiltrække spillere, der søger mere end blot underholdning; de ønsker at blive engageret i dybe historier og komplicerede karakterer. Det sociale liv og de interaktive elementer bliver dermed en integreret del af historiefortællingen.
Spil udenfor Rufus kan også prale med en bred vifte af kunststilarter og æstetiske tilgange, der kan være lige så engagerende som gameplayet selv. Fra pixelkunst til hyper-realistisk grafik, spillerne kan opleve forskelle i præsentation og stil, der kan gøre en subtil, men betydelig, forskel i deres spiloplevelse.
En anden vigtig faktor i spilverdenen uden Rufus er tilgængeligheden af spil. Vores branche bevæger sig mod større inklusion og diversitet, hvilket betyder, at der er flere spillere, der kan finde spil, der taler til dem personlig. Uanset om det er kulturelle repræsentationer, forskellige spilleformer eller tilpassede grænseflader, er der nu meget mere fokus på at skabe et rum for alle spilere.
Fremtiden ser lys ud for spil uden om Rufus. Med den konstante udvikling af teknologi, designergener og publikum ville vi fortsætte med at se nye og fantasifulde idéer komme til live. Dette vil ikke kun bringe friske vinde til branchen, men også velsigne spillere med en overflod af nye oplevelser at udforske. At kigge uden for Rufus kan vise sig at være noget af det mest forfriskende og inspirerende, som spillere kan gøre.
Selvom Rufus måske har sin plads i spilverdenen, er der et rigt og varieret landskab af muligheder, der venter på at blive udforsket. Fra uafhængige udviklere til alternative spilmuligheder, spillefællesskaber og unikke genre-experiencer gør det relevant og interessant at se uden for det etablerede. Uden om Rufus findes en hel verden fyldt med potentiale, som enhver entusiastisk spiller bør tage tid til at udforske.
The post Uden om Rufus En Dybere Udforskning first appeared on .
]]>