Audio Redux + Updated Plugins

I had the pleasure recently of realizing that some of my plugins had disappeared from the WordPress dot org plugins repo because I haven’t updated them in 1.5ish years. Last year at WordCamp San Francisco, I used part of my talk to explain why plugins aren’t always awesome, and me not updating my own plugins is a great example of why. You might think to yourself, “Scott’s pretty good, I’m sure his plugins are awesome, I could probably get pregnant just by activating one of them!” To which I would reply: “If you are using my Movies plugin, I have absolutely no idea if it still works, and I’m sure every javascript library in it is 50-75 versions behind.”

So I am trying to right this wrong and update my code. Back in 2010, I was still under the impression that procedural programming was da bomb. Needless to say, the plugins should work a lot better now and will be maintained / are more maintainable.

Here are some of the plugins that are updated, along with their companion blog posts:

Minify
Plugin: http://wordpress.org/extend/plugins/minify/
Blog Post: http://scotty-t.com/2012/05/24/minify-redux/

Shuffle
Plugin: http://wordpress.org/extend/plugins/shuffle/
Blog Post: http://scotty-t.com/2010/11/15/my-first-plugin-shuffle/

Audio
Plugin: http://wordpress.org/extend/plugins/audio/
Blog Post: http://scotty-t.com/2010/11/22/new-plugin-audio/

Audio is awesome, and here’s why:

  • WordPress doesn’t come packaged with an mp3 player
  • Your player can be styled 100% with CSS – (drop in a replacement: STYLESHEETPATH . ‘/audio.css’)
  • If you use Shuffle, you can attach .ogg files to your .mp3s, and they will be used in native HTML5 browsers that don’t natively support .mp3
  • If you use your own styles, you can style a playlist automatically, and with Shuffle, attach image(s) to each MP3

BOOM. I will try to be a better man in the future and keep my plugins bleeding edge.

xoxo

New Plugin, “Movies”

UPDATE: Movies now supports WebM

Full disclosure: I know there are other HTML5 video players available as WordPress Plugins. I also know Daryl Koopersmith just wrote a plugin for VideoJS cuz he told me on Twitter. However, his plugin (and none of the others) take advantage of the glory that is Shuffle.

For HTML5 video to work, you need 2 (maybe 3) things:

  • an H.264-encoded video file
  • an Ogg Theora-encoded video file
  • a still image to use as a “poster” image for the video when it loads into the player

VideoJS kicks ass because once you have these resources, it is easy to use their boilerplate markup to insert a video tag and a fallback Flash object. What makes it awesome even further is that the player can be styled 100% with CSS/images, even 100% CSS3 if you want! That’s why I fell in love with VideoJS immediately.

What is not so easy is managing all of these file types in the Media Library. That’s why I wrote Shuffle. Shuffle lets you associate anything with anything, even allows you to re-order using drag and drop (high-fiving myself!). So if you are gonna use Movies, you are gonna want to use Shuffle!

Shuffle allows you to search for Attachments when attaching a media item to a post. When you import your movies, please fill out Title-Caption -Description for Title-Artist/Director/Whatever-Description. Always filling out a title will help you in 2 ways:

  • the items will be easier to search for
  • the information is displayed on the page, or hidden but still crawlable, in the hMedia microformat

I decided that if I was going to make swiss-army-knife media plugins, I would try to do everything as semantic and clean as possible.

But back to how it works… once you upload your MP4 file, OGV file, and image, you want to attach the OGV and image to the MP4 file (you need Shuffle for this). From then on, you can attach and detach the MP4 file from whatever Post or Page you want, and the OGV and image will always remain attached to the MP4, unless you detach them manually. When the plugin loads your MP4s to the page, it looks for its attachments to fill out the and poster data in the HTML5 video tag, also uses the image for the Flash fallback, and uses the MP4 data and the image source for the hMedia data.

To use Movies in your theme, you have 2 options:

  • As a shortcode: [movies]
  • As a function: the_movies() or the_videos()

If you need info on how to encode your videos in H.264 or OGV, go here. The markup for the VideoJS player is loaded automatically, as is the JavaScript to dynamically load the videos when clicked from within the list of videos attached to your post. To style the player and the way the playlist looks, add a video.css file to your Theme directory. It will load with the rest of the plugin files and will override where necessary.

http://wordpress.org/extend/plugins/movies/

My First Plugin: “Shuffle”

I have been developing with WordPress for over a year now. It is hard to describe how much it has positively affected my development workflow. It’s easy to install, has easy-to-use APIs and great documentation, and its CMS capabilities are amazing. On top of that, it has a peer-less Plugin architecture which allows anyone to get under the hood and add functionality on top of WordPress core. The WordPress Plugin community is so vast and talented that when functionality is missing from WordPress itself, you are usually only one plugin away from tackling any problem you have.

  • I don’t want to write code that smushes my images, don’t need to: WP-Smush.it did it for me!
  • I don’t want to write a caching mechanism for my site, don’t need to: W3 Total Cache did it for me!
  • How do I write a sitemap and get myself up in the Google? No clue, so I’ll use Google XML Sitemaps!
  • I want to jam a social network into my website, oh heeeeyyyyyy BuddyPress!

But in the midst of this, I started building sites that have a lot of Images, Image Galleries, Video, Audio, Video Playlists, Audio Playlists, HTML5 video players, etc. WordPress is great at doing a few things with media:

1. Uploading multiple files at once
2. Hooks into the Upload actions (WP-Smush.it FTW!)
3. Attaching items to a post
4. Retrieving an item’s attachments (sorta)
5. Navigating through the Media Library… um, not really

Well, here’s what I NEEDED to do:

1. Detach images from a Post without DELETING THEM
2. Re-order my attachments by post (changing the order of a Playlist, etc)
3. Ordering my attachments by something other than date uploaded or title
4. Attach images to a video (another attachment) to use as a preview thumbnail
5. Attach album covers to audio files
6. Re-order a photo gallery at will
7. Do all of the above in an EASY way

WordPress doesn’t do any of this (if it does, it is hidden functionality that I don’t know about). So I decided to do something I, personally, have never done: I wrote a WordPress Plugin. Shuffle is the name of that plugin. Shuffle allows you to do a lot of thing with your Media that are not default WordPress behavior/functionality.

In the way that “tags” and “categories” are really just “taxonomies,” an “image” or a “video” is really just a Post type. Attachments live in the wp_posts table just like Posts, Pages, Custom Post Types, and other types of Attachments.

The wp_posts table has a bunch of fields. However, when it comes to attachments, there are 2 that we are really interested in: post_parent and menu_order. The act of attaching an image is really just setting the post_parent on the image to whatever number corresponds to the attaching Post type’s ID. If you attach 30 images to a post called “Hello World!” and Hello World’s ID in the database is 187, all 30 of those images will have post_parent set to 187. So if you want to “detach” the image, all you really need to do is set its post_parent to 0 (zero). Seems easy enough? Yet this is not an option in the Media Library.

If you create a Page and then create child Pages of that same Page, you will notice an attribute you can set by hand in the Edit panel: “order.” This corresponds to the menu_order field in the wp_posts table of the database. When you upload Attachments, menu_order is set to a default of 0 (zero) with no option to even change it by hand. Even if you could change it by hand, doing so for 50 images would be very very tedious. Wouldn’t it be great if you could see all 50 of those images for the attaching post and then re-order the images using a cool Drag and Drop UI that will set menu_order for you? You would think something that does at least half of this would be in WordPress by default, it is not.

I just uploaded a Video and want to feature it on a Page. I am going to use a slick new HTML5 Video Player and my Player wants me to specify a preview image / a “poster” image. I don’t necessarily have to do this, but I’d like to select the still show that shows on the screen before the user plays the video. I also want to set a thumbnail for the video so I can show a bunch of videos in a list or set up a cool HTML5 Video playlist. So how do I attach an Image to a Video in WordPress? You can’t.

This is where Shuffle comes in. Shuffle can do all of these things. Attach anything to anything. Detach without losing your files. Order your attachments by dragging and dropping like other services allow you to do. In your item’s list of Attachments, click on an item to see its Attachments! On so on and so on. Anyways, you need Shuffle! See it in action by downloading here:

http://wordpress.org/extend/plugins/shuffle/