Say you wanted to create a shortcode like this: [youtube id="991WcoEPwb8"]
And instead of manually creating the HTML yourself, you wanted to use YouTube’s oEmbed provider to get the HTML. While that’s easy to do using WordPress’ existing functions (wp_oembed_get()
for example), you must implement your own caching of the result as WordPress’ oEmbed class does not include any caching of it’s own.
However, WordPress comes with an [embed]
shortcode that’s also secretly used for the shortcode-less embeds. A cool trick is to make that shortcode’s existing code (complete with caching) work for you! This post explains how to do it.
First, the code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | add_shortcode( 'youtube' , 'my_youtube_shortcode' ); function my_youtube_shortcode( $atts ) { // We need to use the WP_Embed class instance global $wp_embed ; // The "id" parameter is required if ( empty ( $atts [ 'id' ]) ) return '' ; // Construct the YouTube URL // Run the URL through the handler. // This handler handles calling the oEmbed class // and more importantly will also do the caching! return $wp_embed ->shortcode( $atts , $url ); } |
We start by gaining access to the WP_Embed instance that we’ll be making use of and then making sure we have the required video ID (you can do whatever you want here). We then create the full URL to the video that oEmbed will need. Lastly the real time saver — we pass the attributes (“id” will be ignored) and the constructed URL to the [embed]
shortcode handler which will fetch the result and cache it.
Simple, huh?
One thing to note though: if you’re using this along with a non-default oEmbed provider, you’ll also need to whitelist it using wp_oembed_add_provider()
.