Skip to: Navigation | Footer

Pimping out WordPress

WordPizzle to the Shizzle, yo

wordpress-pimpedI don't know what it is with me and having to bolt on every, sometimes unnecessary, extra to software that allows me to do it. It's no different with WordPress and plugins. Same goes with Firefox and extensions (that's gonna be another post).

Sure most of it is for functionality, but a lot of it is because I like to tweak things to the point of death. But it does amaze me that so many people are happy with the base functionality that WordPress provides and instead concentrate on the visual customisation (which unfortunately seem to be mostly poorly ported versions of Kubrick[1]).

The big push that I got was having to customize client websites to bend WordPress beyond it's normally used for (a blogging tool) towards more of a full CMS. This exposed me to a wider range of plugins that would also cross-over into the blogosphere as well.

I will leave the focus on using WordPress for a CMS to another post (i'm trying to save up a list of topics I want to write about), and concentrate on listing the plugins that are in use on this site with reasons for choosing them. This gives me the opportunity to give "props" to the plugin developers, but also give an insight to others who may like what I have done here and want to get a handle on the behind the scenes approach.

This will probably be a long post, and I want to test out post pagination - so bear with me...

40 Plugins and counting...!

I used to hack the core files of WP to get the functionality more often than not because there was no other way to do it, but as the code base continues with development, more and more hooks have been introduced to the point where now, it is very rare to have to touch the core code. This means that developers can manipulate existing functions, and can create new ones that, well, plug in to the code base. The upside of this is that you don't have to worry about what files you edited when it comes time to upgrade. A further benefit of that separation is that you can edit the plugins themselves should they fall short of your expectations.

OK, the list:

  1. Advanced Admin Menus
    The administration area of WordPress is pretty naf, especially when it comes to navigation UI. This plugin gives you quick and easy access to main and sub-navigation items, without having to click-click-click. A necessity until WP revamps the admin (which may still require such plug-ins if the preview is anything to go by[2]
    Author: Andy Staines
  2. AJAX Comments
    Self explanatory, makes the comment area more usable - auto adding the comment without refreshing the page.
    Author: Mike Smullin
  3. Akismet
    Comment spam blocker that comes with standard with WP. So far saved my site from close to 35,000(!!!) spam. Given those figures I can put up with the minor manual clean-up.
    Author: Matt Mullenweg and Automattic
  4. All in One SEO Pack
    Probably the best of SEO plugins for WP, does what a lot of the others do combined. Manipulates the title tags, auto-sets Meta keyword and description tags.
    Author: uberdose[3]
  5. Angsuman's Multi-Page Plugin
    Creates an admin button to make inserting the <!--nextpage--> easier - something that is sorely missing in the default code base.
    Author: Angsuman Chakraborty and Taragana
  6. Author Highlight
    Allows a CSS class to be set if the blog author makes or replies to a comment.
    Author: Jonathan Leighton
  7. Better Feed
    Comprehensive RSS/Feed enhancer that allows you to add content/copyright to your feed. Needs a bit of enhancement and some admin control - but still recommended.
    Author: 'Ozh'[2]
  8. BlogStats PCC
    From the highly respected and informative Perishable Press site comes this plugin which more of an amalgamation of PHP functions that allows the blog-owner to pull the number posts, categories, comments etc etc.
    Author: Jeff Starr
  9. cforms II
    By far the most comprehensive and impressive plugin that exists for WordPress (IMHO), let alone the rest of the contact forms. This plugin allows a comprehensive, yet simple, method of adding a contact form to your website. The help section alone must have taken days to write. Highly recommended!
    Author: Oliver Seidel
  10. Code Highlighter
    Syntax highlighter for source code (PHP/XHTML/CSS etc). I admit this will be the first post to use this plugin as there's nothing worse than reading code inside a blog in plain text.
    Author: Wongoo Lee
  11. Configurable Tag Cloud
    Based on the widget version (I personally don't like/use widgets) by Keith Solomon, this plugin extends the basic Tag Cloud that comes with WordPress. Soon to be launched for the public.
    Author: Me!
  12. Custom Query String Reloaded
    Building on the work done by Matt Read, Moshu has extend this plugin that allows you to dictate through the admin panel how many posts to show based on criteria. Essential.
    Author: Moshu
  13. Days Since Birth
    Simple function that calculates the number of days since the first post.
    Author: Emma McCreary
  14. Dean's Permalinks Migration
    A life-saver of a plugin for those who want change their URL structure without loosing their link juice. Great stuff!
    Author: Dean Lee
  15. FeedBurner FeedSmith
    Originally authored by Steve Smith, this plugin detects all ways to access your original WordPress feeds and redirects them to your FeedBurner feed so you can track every possible subscriber.
    Author: FeedBurner
  16. Full Text Feed
    Additional plugin to stop feed's breaking up the post length (This post will it's first test)
    Author: Ronald Heft, Jr.
  17. Google Analyticator
    Another gem from Ronald, this plugin takes the gruntwork out of placing your Analytics code in your site. There are others out there that do the same thing, but this one does it the way I like.
    Author: Ronald Heft, Jr.
  18. Google XML Sitemaps
    This plugin will generate a sitemaps.org compatible sitemap of your WordPress blog which is supported by Ask.com, Google, MSN Search and YAHOO.
    Author: Arne Brachhold
  19. Gravatar
    This plugin allows you to generate a gravatar URL complete with rating, size, default, and border options. My version is slightly hacked.
    Author: Tom Werner
  20. Gregarious
    This interestingly named plugin allows easy sharing of posts via a range of Social Bookmarking websites or by email. See it in action on the side-bar of this post.[4]
    Author: Ankur Kothari
  21. JPF Link Pages
    Provides options for multipage navigation that WP’s link_pages function doesn’t, like choice of a separator, combining numbers and next/previous, and link on first page only.
    Author: Joseph Fieber
  22. Lightbox 2 Plugin
    Auto-converting all linked images in a post, excerpt and even comments to lightboxed links.
    Author: Kjell Bublitz
  23. Live Comment Preview
    Supply users with a live comment preview. Based on version 1.7 by Jeff Minard.
    Author: Brad Touesnard
  24. Most Commented
    Retrieves a list of the posts with the most comments. Modified for Last X days — by DJ Chuang.
    Author: Nick Momrik
  25. Nicer trackbacks
    Changes the display of trackbacks from […] Tracbackback text […] to something a little more readable.
    Author: Rachel Cunliffe
  26. Ping/Track/Comment Count
    Functions that return or display the number of trackbacks, pingbacks, comments or combined pings recieved by a given post.
    Author: Mark Jaquith
  27. Maintenance Mode Plugin
    Adds a splash page to your blog that lets visitors know your blog is down for maintenance. Logged in administrators get full access to the blog including the front-end.
    Author: Michael Woehrer
  28. ToDo
    Lets you create and manage a todo list from inside the WP admin area, also allowing you to display this list on your site (as seen at the bottom of the About page on this site[5]
    Author: Pravin Paratey
  29. Twitter Tools
    A complete integration between your WordPress blog and Twitter. Bring your tweets into your blog and pass your blog posts to Twitter.
    Author: Alex King
  30. WordPress Clean Archive
    Display a nice ‘n clean archive table on your blog. Not active at time of writing this as I need to tidy up the archive footer before implementing.
    Author: Bas Wenneker
  31. WordPress Database Backup
    On-demand backup of your WordPress database. Essential if you're paranoid about loosing your data!
    Author: Austin Matzko
  32. WordPress Heat Map
    Template tags for a heat map of category links and archive links. Used here for the photoblog tag-cloud.
    Author: Christoph Wimmer
  33. WP-Footnotes
    Allows the easy addition of footnotes to a post. Customisable through the admin area.
    Author: Simon Elvery
  34. WP-PageNavi
    Adds a more advanced paging navigation to your WordPress blog. As seen on the archives.
    Author: Lester Chan.
  35. WP-Plugin List
    Adds a more advanced paging navigation to your WordPress blog. As seen on the archives.
    Author: Martin Wiso.
  36. WP-RelativeDate
    Displays relative date alongside with your post/comments actual date. Like ‘Today’, ‘Yesterday’, ‘2 Days Ago’, ‘2 Weeks Ago’, ‘2 ‘Seconds Ago’, ‘2 Minutes Ago’, ‘2 Hours Ago’.
    Author: Lester Chan.
  37. WP 2.3 Related Posts
    Generate a related posts list via tags of WordPress 2.3
    Author: Denis PaoPao
  38. WP Admin Bar 2
    Displays a links bar at the top of the page when logged in, bypassing the need to manually reach the admin area.
    Author: Matt Read
  39. WP Super Cache
    Very fast caching and configurable module for WordPress. Based on WP-Cache by Ricardo Galli Granada.
    Author: Donncha O Caoimh
  40. Yet Another PhotoBlog
    Probably the most important plugin of the site, allows you to use WordPress as a PhotoBlog. Extensive feature set and very configurable.
    Author: Johannes Jarolim

Not all plugins are created equal!

The way I see it, there are plugins and then there are real plugins. The first are only functions or function sets that either hook into or manipulate either the code or the database of WordPress. Real plugins are the same, but they offer fully configurable options as part of the admin area. However, this is not to say that the plain plugins are any less important to the flexibility that they offer the website owner.

The previous list of plugins aren't the full story, some functions I have borrowed, tweaked and/or rewritten and placed in the functions.php file inside of the template, and are loaded as part of that template. Here are those functions:

  1. function time_since($older_date, $newer_date = false){
  2. // array of time period chunks
  3. $chunks = array(
  4. array(60 * 60 * 24 * 365 , 'year'),
  5. array(60 * 60 * 24 * 30 , 'month'),
  6. array(60 * 60 * 24 * 7, 'week'),
  7. array(60 * 60 * 24 , 'day'),
  8. array(60 * 60 , 'hour'),
  9. array(60 , 'minute'),
  10. );
  11. // $newer_date will equal false if we want to know the time elapsed between a date and the current time
  12. // $newer_date will have a value if we want to work out time elapsed between two known dates
  13. $newer_date = ($newer_date == false) ? (time()+(60*60*get_settings("gmt_offset"))) : $newer_date;
  14. // difference in seconds
  15. $since = $newer_date - $older_date;
  16. // we only want to output two chunks of time here, eg:
  17. // x years, xx months
  18. // x days, xx hours
  19. // so there's only two bits of calculation below:
  20. // step one: the first chunk
  21. for ($i = 0, $j = count($chunks); $i < $j; $i++) {
  22. $seconds = $chunks[$i][0];
  23. $name = $chunks[$i][1];
  24. // finding the biggest chunk (if the chunk fits, break)
  25. if (($count = floor($since / $seconds)) != 0):
  26. break;
  27. endif;
  28. }
  29. // set output var
  30. $output = ($count == 1) ? '1 '.$name : "$count {$name}s";
  31. // step two: the second chunk
  32. if ($i + 1 < $j):
  33. $seconds2 = $chunks[$i + 1][0];
  34. $name2 = $chunks[$i + 1][1];
  35. if (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0):
  36. // add to output var
  37. $output .= ($count2 == 1) ? ', 1 '.$name2 : ", $count2 {$name2}s";
  38. endif;
  39. endif;
  40. return $output;
  41. }
  42. function get_parent_category() {
  43. global $cat;
  44. foreach ((get_the_category()) as $cato):
  45. if($cat==$cato->cat_ID):
  46. if($cato->category_parent==0):
  47. return $cat;
  48. else:
  49. return $cato->category_parent;
  50. endif;
  51. endif;
  52. endforeach;
  53. return $cat;
  54. }
  55. function get_random_photos($before="
  56. <li>",$after="</li>
  57.  
  58. ",$numPosts="4") {
  59. global $post,$wpdb;
  60. $randposts = get_posts('numberposts='.$numPosts.'&category_name=photos&orderby=rand()');
  61. if ( $randposts ):
  62. foreach ( $randposts as $post ):
  63. setup_postdata($post);
  64. $start = $before.'<a href="'.get_permalink().'" title="Visit &lsquo;'.the_title('','',false).'&rsquo;">';
  65. $thethumb = yapb_get_thumbnail('','','', array('w=150', 'q=80'), 'thumbnail');
  66. $end = "</a>".$after."\n";
  67. echo $start.$thethumb.$end;
  68. endforeach;
  69. else:
  70. echo "Nothing found";
  71. endif;
  72. }
  73. function seriocomic_redirect() {
  74. $thiscat = get_parent_category();
  75. if ( ($thiscat == '27') && (!is_feed()) && (!is_category()) && (file_exists(TEMPLATEPATH . '/rhetoric.php')) ):
  76. load_template(TEMPLATEPATH.'/rhetoric.php');
  77. elseif ( $_GET['template'] && (file_exists(TEMPLATEPATH.'/'.$_GET['template'].'.php')) ):
  78. load_template(TEMPLATEPATH.'/'.$_GET['template'].'.php');
  79. endif;
  80. }
  81. add_action('template_redirect','seriocomic_redirect');
  82. remove_action('wp_head', 'rsd_link');
  83. remove_action('wp_head', 'wlwmanifest_link');
  84. if (function_exists('wp_generator')) {
  85. remove_action('wp_head', 'wp_generator');
  86. }

The final word

Yikes, that took a lot longer to compile and write than I thought. Rather than trying to keep this page updated, I will add another plugin that will dynamically output the list of current plugins on it's own page.

If this sort of thing spins your trolley wheels then you might be interested in the following similar articles:

If you have a favorite plugin, or are an author of a plugin listed in this entry and would like to change a reference to your plugin, leave a comment and let me know.

[Updated: 4 Jan 08 - corrected usage of 'plug-in' to 'plugin' as per Lorelle's instructions, and minor errors.]
[Updated: 5 Jan 08 - added link to dynamic plugins list page]

Footnotes:
  1. A theme authored by the illustrious Michael Heilemann that made it as the default for WP[^]
  2. WordPress 2.4 Admin preview at Weblog Tools Collection.[^][^]
  3. I couldn't find his/her real name[^]
  4. Active at the time of this post[^]
  5. ref:2[^]

Read the 2 comments so far, and add yours .

2 comments and counting...

Jump to comment form | comments rss[?]
  1. gravatar Tyrun 2 years, 8 months ago

    Haha – I thought I was the only one that went nuts on plugins. Whether it’s WordPress or Firefox, I somehow find the need to outfit whatever I’m using with the latest and coolest plugins. Lately I’ve been keeping it to the things I find most useful without going too overboard.

    Top notch post Mike, thanks for sharing – I’ve always enjoyed your work, as well as how you present it. Thanks for sharing some of your secrets :)

  2. gravatar seriocomic 2 years, 8 months ago

    Thank Tyrun.

    For those who hate the multiple page thing – I am working on a full-post option, and still working on fixing the feeds to show the full post…

Have your say!

Comment moderation is currently enabled.
There will most likely be a delay with your comment appearing if this is your first time.

DoFollow is in place.
I reward quality commenters with some of my google-juice.



No trackbacks/pingbacks so far...

Jump to comment form