The ‘pre_oembed_result’ filter allows you to modify or short-circuit the oEmbed result before making any HTTP requests. This is useful for optimizing your setup or altering the default logic.
Usage
add_filter( 'pre_oembed_result', 'my_custom_oembed_function', 10, 3 );
function my_custom_oembed_function( $result, $url, $args ) {
// Your custom logic here
return $result;
}
Parameters
$resultnull|string- The UNSANITIZED (and potentially unsafe) HTML to be used for embedding
- Default: null (continue retrieving the result)
$urlstring- The URL of the content to be embedded
$argsstring|array- Additional arguments for retrieving embed HTML
- See
wp_oembed_get()for accepted arguments - Default: empty
Examples
Using a Custom Video Player
Scenario: You want to use a custom video player for YouTube videos.
add_filter( 'pre_oembed_result', 'use_custom_youtube_player', 10, 3 );
function use_custom_youtube_player( $result, $url, $args ) {
if ( strpos( $url, 'youtube.com' ) !== false ) {
// Custom YouTube player code here
}
return $result;
}
This code checks if the $url is a YouTube video and, if so, applies a custom video player.
Blocking External Embeds
Scenario: You want to block any external content from being embedded.
add_filter( 'pre_oembed_result', 'block_external_embeds', 10, 3 );
function block_external_embeds( $result, $url, $args ) {
return null;
}
This code blocks all external content from being embedded by returning null.
Limiting Width and Height of Embedded Content
Scenario: You want to limit the width and height of all embedded content.
add_filter( 'pre_oembed_result', 'limit_embed_size', 10, 3 );
function limit_embed_size( $result, $url, $args ) {
$args['width'] = 600;
$args['height'] = 400;
return wp_oembed_get( $url, $args );
}
This code limits the width to 600px and height to 400px for all embedded content.
Replacing Vimeo with YouTube
Scenario: You want to replace all Vimeo video URLs with corresponding YouTube URLs.
add_filter( 'pre_oembed_result', 'replace_vimeo_with_youtube', 10, 3 );
function replace_vimeo_with_youtube( $result, $url, $args ) {
if ( strpos( $url, 'vimeo.com' ) !== false ) {
$youtube_url = str_replace( 'vimeo.com', 'youtube.com', $url );
return wp_oembed_get( $youtube_url, $args );
}
return $result;
}
This code replaces all Vimeo video URLs with YouTube URLs before embedding.
Caching Embed Results
Scenario: You want to cache the oEmbed results to improve performance.
add_filter( 'pre_oembed_result', 'cache_oembed_results', 10, 3 );
function cache_oembed_results( $result, $url, $args ) {
$cache_key = 'oembed_cache_' . md5( $url ); $cached_result = get_transient( $cache_key );
if ( $cached_result ) {
return $cached_result;
} else {
$oembed_result = wp_oembed_get( $url, $args );
set_transient( $cache_key, $oembed_result, 2 * HOUR_IN_SECONDS );
return $oembed_result;
}
}
This code caches the oEmbed results for two hours, improving performance by reducing the number of HTTP requests made for the same content. When the cache expires, a new request will be made and the result will be cached again.