Skip to content

Instantly share code, notes, and snippets.

@developdaly
Last active March 16, 2016 21:45
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save developdaly/4561209 to your computer and use it in GitHub Desktop.
Save developdaly/4561209 to your computer and use it in GitHub Desktop.
This shortcode will reference a media item, configurable via attributes. Using a shortcode is more flexible and won't require database search/replace when migrating domains. Core would benefit from utilizing this system rather than inserting absolute paths to media URLs. A shortcode would keep media references relative to the site's domain.
<?php
/*
* Plugin Name: Media Shortcode
* Author: developdaly
* Version: 1.0
* Description: This shortcode will reference a media item, configurable via attributes. Using a shortcode is more flexible and won't require database search/replace when migrating domains.
*
* ex. [media id="97"] = <img src="http://example.com/97-300x150.jpg" class="thumbnail">
*
*/
add_shortcode( 'media', 'shortcode_media' );
add_filter( 'image_send_to_editor', 'shortcode_media_send_to_editor', 10, 7);
function shortcode_media_send_to_editor($html, $id, $alt, $title, $align, $url, $size ) {
$url = wp_get_attachment_url($id); // Grab the current image URL
$html = '[media id="' . $id . '" alt="' . $alt . '" title="' . $title . '" classes="' . $align . '" size="' . $size . '"]';
return $html;
}
function shortcode_media( $atts ) {
extract( shortcode_atts( array(
'id' => false,
'size' => 'medium',
'classes' => 'thumbnail',
'icon' => false,
'permalink' => false
), $atts ) );
// Get mime type
$type = get_post_mime_type( "{$id}" );
switch ( $type ) {
case 'image/jpeg' || 'image/png' || 'image/gif':
$image = wp_get_attachment_image_src( "{$id}", "{$size}", "{$classes}", "{$icon}" );
$before = '';
$after = '';
if( "{$permalink}" == true ) {
$before = '<a href="'. wp_get_attachment_url( "{$id}" ) .'" rel="attachment wp-att-'. "{$id}" .'">';
$after = '</a>';
}
$output = $before .'<img src="'. $image[0] .'" height="'. $image[2] .'" width="'. $image[1] .'" class="'. "{$classes}" .'">'. $after;
break;
case 'video/mpeg':
case 'video/mp4':
case 'video/quicktime':
return $base . "video.mov"; break;
case 'text/csv':
case 'text/plain':
case 'text/xml':
return $base . "text.txt"; break;
default:
return $base . "file.file";
}
return $output;
}
@briancnolan
Copy link

This works great. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment