Like most of you, I have experimented with many WordPress plugins. I have seen a lot of great plugins and also a lot of bad plugins. I am a bit of a WordPress plugin developer myself, and I admit that I borrow many ideas from other good WordPress plugins. From that experience I have consolidated these good ideas into a checklist that you can follow when reviewing or coding a new WordPress plugin. Here are my picks of the top characteristics that make a great WordPress plugin.

10. Easy Installation

I have seen plugins that require you to modify code after plugin activation to be able to get it to work properly. The instructions were documented clearly in the readme.txt file, but most of the users seem to have missed it (I could tell from the frustration in the plugin support thread). Not everybody reads the installation instructions inside the readme.txt file. The plugin should make an attempt to be able to run straight out of the box after activating no matter how complicated it is.

A good example of this can be found in the “cSprites” plugin. Just activate the plugin and it stitches all images in your posts into CSS sprites to reduce HTTP requests.

9. Seamless Upgrade

As a plugin gets revised, there are bound to be more configuration options or database changes. A good plugin should be able to handle these database changes seamlessly upon upgrade. There are a few ways to do this.

One method is to keep track of configuration option fields. If the option field is missing, then populate it with the default value.

Another method is to keep track of the last upgraded version as one of the hidden plugin settings. On each wp-admin page load, the plugin can check the last upgraded version against the current version and perform a database upgrade operation if necessary.

A good example of seamless upgrade can be found in the “Top 10” plugin.

8. Uninstall Option

The majority of plugins I see leave a bit of a foot print in the database after the user deactivates and deletes it. Some even leave a whole table in the database. Great plugins give you the option to “uninstall” and wipe out all information regarding the plugin.

A good example of this uninstall feature can be found in the “WP-PostViews” plugin.

7. Meaningful Error Messages

When things go wrong with the plugin, there should be a meaningful error message hinting at the problem. That way, the user can troubleshoot it themselves without having to ping the author for support. For example, there are quite a few plugins out there that require you to grant server write permissions to a folder before it can work properly. Failing to do so causes the plugin to silently fail or to bark with weird error messages.

A good example of highly meaningful error messages for troubleshooting can be found in the “WP Super Cache” plugin.

6. Localization Support

Not everybody is comfortable with English. Great plugins are aware of this and are coded with localization support.

5. Intuitive Admin User Interface

Huge plugin configuration pages can confuse the user. It is best to group similar options into it’s own sub-page. It might also be helpful to group advanced features onto its own page or have them hidden by default. That way new users won’t get intimidated by confusing options.

A good example of intuitive plugin admin user interface can be found in the “Referrer Detector” plugin.

4. Reset/Import/Export Options

I am happy to see that a lot of plugins now have the “Reset options” feature which lets you restore configurations if anything bad happens. I have yet to see “Import” and “Export” configurations widely used though. If the plugin has a lot of options, it would be nice to offer the user the ability to import and export those options. That way people can make a backup of their settings or use it as a way to easily manage multiple blogs.

A good example of reset/import/export options can be found in the “WP Greet Box” plugin.

3. Optimized

There are a many things to consider here aside from code performace and optimized database calls. Here are a few outside-of-the-box examples:

A plugin should not load unnecessary CSS and Javascript files if it doesn’t need to. For example, there is no need to load the same CSS and Javascript files on every wp-admin page if it is only being used on one plugin settings page.

Since WP Super Cache is one of the most popular ways to fight traffic storms, a good plugin makes an effort to be compatible with WP Super Cache.

WordPress is always being enhanced (new functions/features added and old ones deprecated). A good plugin stays up to date with these API changes. For example, wp_enqueue_script() and wp_enqueue_style() help avoid reloading the same CSS or Javascript file. wp_enqueue_script() has been available since version 2.1 and wp_enqueue_style() since version 2.6, but I still see many plugins not using them.

2. Secured

A good plugin does not ignore security. There are also many things to consider when thinking about security. Here are a few basic examples:

A good plugin makes use of nonce validation in wp-admin.

A good plugin does not print sensitive information into the Javascript code since it is visible on the client side.

A good plugin makes an effort to protect against SQL injection and XSS exploits.

1. Good Support and Thorough Documentation

Finally, no one will use the plugin if it’s not supported or documented properly. There are plenty of awesome plugins out there that I don’t use just because it is not supported (e.g. Popularity Contest).

Do you Disagree?

Do you think that there should be something else on that list? If so, please share in the comments section!

Comments

I agree, I have been using most of these except for number 4.
Need to look into reset, I made a mistake on a release that could have affected other plugins, but I cause it quickly and updated the repository before the update notify kicked in.

The most important to me is a seemless upgrade and – not on the list – but actually continued upgrades as WordPress versions progress. There’s nothing worse than a popular plugin that doesn’t update when updates break it.

That is a good one. I think I kind of mentioned it under the optimized section saying that “A good plugin stays up to date with these [WordPress] API changes.” I forgot that WordPress upgrades can break plugins (not because of API changes). Maybe it can be lumped into #1 (Good Support) :).

You certainly have the correct #1 on your list. The only thing worse then a plugin that is incompatible with one I am already using, is one that requires PHP 5 but doesn’t say that anywhere in the documentation. It wastes my time and theirs when I report an error that isn’t really one, I am just using PHP 4.

No it is what my host provides. I don’t mind developers that use PHP5 for their plugins, especially if they need to to make things work. I just want them to tell me, someplace in all the room that the plugin depository gives them for documentation. Shoot, I have had some plugins fail because they require MySQL 5 and my db is on version 4. My host offers that now, but I am half afraid of trying to move it, the last couple times I have done that have been very frustrating.

I think the Add to Any `share` and `subscribe` plugins exemplify some of these characteristics. They’re optimized, easy to install/upgrade, excellent FAQ/docs, localization support, really great support and community outreach from the authors (almost unheard of from big plugins!). Check these two out http://wordpress.org/extend/plugins/tags/addtoany

PHP4 compatibility used to be a big deal for me, but there is a lot of PHP5 support now.

Thaya, it’s sure great to have a friend writing for WLTC Thanks for mentioning my plugin! But the most important is, great article as always! 3, 4, 6, 8 are brilliant, and are what mine lacks of. Will definitely take them into account for the next version as well as new ones to come!

yes. I think 10, 9, 8, and 1 are ABSOLUTE necessities. I have seen a pattern that certain plugin authors have throughout their entire set of plugins. I’ve yet to see an author write 5 good plugins and 1 bad plugin. Usually, the bad plugins are just written by lazy or clumbsy authors. I’ve never seen a good author write a bad plugin, not ever. I won’t mention names, but there is one set of plugins in particular from a certain author that has been well up-to-date on all the versions of WP, probably quicker then most other authors, but has absolutely NO support, documentation, readme, or installation instructions on this authors plugin site at all. Its like he expects everybody in the world to be an IT professional. In fact, he don’t even have a site for his plugins, but you see them in the WP repository, and its the only place you know an update even exists, which alone is bad. This particular author only offers limited support in the WP IRC chat room, and I see alot more people like him lurking around the WP forums, and probably spend about 10-15 hours a day in there and in IRC chat, if not longer by use of proxies. plugin authors like that have no business writing plugins for the public, I look at those kinds of authors and think to myself “oh there just 12 yr olds working on daddys computer” or something, its just the impression I get from this guy, I don’t take him seriously as a plugin author, and it surprises me that anyone downloads his plugins at all, no matter how good they are, and he’s got several good ones that have been around for many years. In fact, I have found alternatives to his plugins and have stopped using them and threw away any reference to his plugins entirely just for that reason. I mean, they were good well coded plugins, but without 10, 9, 8 and 1, forget about even offering a plugin to the public IMHO. I mean, you dislike very much not to support an author in his work, but common, without 10, 9, 8 and 1, especially 1, then you might as well not even bother writing plugins at all and then people have the attitude like “well then FINE I won’t” but thats not the attitude to have either. Just don’t be lazy, is the point, act like a professional, and people will come back and treat you that way.

People do read readme’s. I know some don’t, but I actually read a readme file first before even bothering to look at the authors website. I do that on purpose just because its faster to get a plugin installed that way, but honestly, the best way to install any plugin, is to extract the plugin into the plugins directory into its own directory under plugins keeping everything there, since most everyone is familar with that setup procedure already, that way you don’t have to sit there and read a whole lengthy thing just to get a plugin installed. and again uninstall is very important because alot of plugins leave code into the mysql database, which only clutters up the database or makes the mysql database much bigger then it has to be, especially because a blog takes up alot of space in a mysql database to begin with, and the more space you use up, the more money the webmaster has to pay to run his site, and that only gets people touchy, since money always makes people touchy.

Remember, there are 900+ unique plugins out there, much more are listed in the repository, but dozens that do exactally the same thing, so if authors don’t read these types of rules, nobody will download yer plugin and just go on to one of the other 12 just like yours. Its the harsh truth unfortunately, and alot of that is because some plugin authors don’t bother searching for a plugin that already exists like the one their writing, before writing one of their own. THats why, as a plugin author, don’t try to come up with something unique, come up with a good well documented plugins that work, thats the key Some of the best plugins start from good ideas from old plugins that just weren’t well enough documented or no longer support latest releases of WP, so stick with that concept if your having trouble thinking of ideas

Also, and this is also the harsh truth, once you’ve written your plugin, put it in the WP plugin repository, otherwise again, noone will use your plugin, because its alot easier for most people to just find your plugin in the repository, otherwise hardly anyone will be able to find your plugin

I’m sorry, but they really need to fix that gravatar.com site.
I can pull my own gravatar over here every time without a single problem, but whenever I go on someone elses website, like here for example, my avatar is NOT shown! ticks me off!! that gravatar.com site has been nothing but trouble for me ever since 2.0 came out and they switched to that lighthttpd thing. I can pull my gravatar up every time in the troubleshooting, but it never comes up on anyone elses site, ever. it drives me nutts.

also, is there a way to make your avatar show up on your blog in the post that your writing? because I have not been able to figure out how to do that yet. I should write a plugin just for that, gravatar support built into WP only shows up in comments, not on posts or pages, so I should, or someone should, write a plugin to change that, to make avatars globally recognized. Its probably really simple, but I don’t know how to do it, so I’m gonna figure it out.

This list can also be used when we are building a new WP plugin from scratch. I think proper documentation, support and legible help messages makes any plugin more likable than others. Great post Thaya.

that is something, every plugin developer should think.I completely agree with almost all points.and the most important one with the 3rd point.I have seen so many plugins loading unnecessary javascript and css not only on all admin interface ,but also on each and every blog page.Try some of the most respected contact form plugin,and you will see what I mean.Almost all contact form plugins loads unnecessary css/javascript on each and every page of the blog(while there will be at most one or 2 page using the form).btw,other plugins have also the same issue,but I believe these issues can be solved ,if thought properly while developing the plugin.

I have thought a bit about #6. Localization Support, but as I only know English fluently, I would need to “pick” words and phrases out of other’s translations and hope they’re correct. Even online translators give different results for the same phrase, so it’s not easy, but I guess any effort would be better than none.

Looking at view-source I recently realized that I need to give some attention to #3. Optimized. I’ve named the CSS selectors to be unique to my plugin admin pages so they don’t conflict, but the styles really don’t need to be there for other admin pages.

As for plugins leaving behind options in the database, if all plugins did that, one of my plugins take a significant hit. That, and if WordPress ever cleans up after itself, it would be obsolete. Not that I wouldn’t welcome the improvement.

I agree with your list, I find that not to many plugins are [#3] optimised. They tend to load their own (sometimes non g-zipped) version of javascript libraries in use. This does seem to be improving with a number now using google’s AJAX Libraries.

Man I really direction on some PlugIn stuff.
I have got to make PlugIns for Cell Phones and other devices. I have a new thing one new peace of hardware to write for that needs support for lots and lots of devices.
Wow I am in over my head where to start??? I know software I know MS stuff really well. I have all the MS stuff right now. Anyone?

I am going to start right here on the Laptop and us what MS and I have worked out. I think I’ll be supporting over 100 devices. From CELL Phones to New readers that we develop to handheld to things like the ATM when you walk up. I know it sounds funny but it will be really big and very much I like the IDEA OF PLUGINS. SIMPLE YES YES.
IDEAS? THE DON OF THE OC EMAIL ME IF YOU THINK TO; donh466@hotmail.com

One thing I really like in a WP plugin is the ability to have a custom CSS file. One that is not touched by any upgrades. I have a plugin that I really love, but I have to export my CSS locally when I need to upgrade it.

What I love about WordPress is that it very user friendly and simple to use. Plugins are very easy to install. Plus there is a great tutorial found in codex.wordpress.org and lots of resources too (as you have pointed out in #1). It has help me a lot in building my site.

[…] Top 10 Characteristics of a Great WordPress Plugin | Weblog Tools Collection From that experience I have consolidated these good ideas into a checklist that you can follow when reviewing or coding a new WordPress plugin. Here are my picks of the top characteristics that make a great WordPress plugin. […]