My WordPress Plugins – A Short History

on in Blog
Last modified on

Over the course of my 20 years as a PHP developer, I have developed many WordPress plugins. I don’t have an exact number, as some of them have been custom code plugins, some of them bespoke plugins for various clients, some of them have been experiments which eventually ended up being merged in larger functionality plugins. In this article, I’d like to make a list of all my plugins (the ones I still have or remember developing).

Introduction

Being a full-stack developer and understanding how WordPress worked from the very beginning, I have never abused the functions.php file for custom functionality or features.

Long before the explosion of form plugins, I coded several bespoke forms for front-end uploading. I remember one plugin was for a big company, and they requested a video upload form. This needed to be bespoke, as the uploaded data was on a secure server and there were various API keys involved. This ended up being a very nice and complex bespoke plugin. Years later, the site has evolved, and my plugin is gone.

Another plugin that started as a small project and an offshoot of the Traq project (a bug tracking system, similar to Redmine’s Trac) ended up as a plugin on CodeCanyon. The plugin, Roo Project Management, got a bit of traction until I pulled it down to merge it with a web directory plugin (as they shared the same code structure) and republish it on CodeCanyon as Roo Framework. This one got a bit of traction, too.

Looking back I can see more bespoke plugins, such as a hotel management system, a CRM and a document manager. They are all gone now.

I had an eCommerce plugin called GBCart. I used it for several clients, and it worked perfectly for my needs. Here are some screenshots I found:

You can find an old version of GBCart on GitHub.

👀

Commercial Plugins

Here’s a list of some of my old commercial plugins I’ve found, thanks to web.archive:

Clicker Counter

A basic statistics plugin. It evolved into a standalone PHP solution, then back into a WordPress plugin – Smashing Analytics – then into Active Analytics. None of the old code exists.

Comment Genius

Comment Genius was a plugin which allowed the admins to aggressively market their site by presenting a lightbox with Facebook Like/Share, Twitter Tweet, Google AdSense Ads and more to their visitors upon leaving a comment.

Mobilize

This one still exists and it’s free now.

Autocomplete Wizard

This plugin allowed text autocomplete on various search forms. Basic, but really useful.

vote5

This plugin still exists and it is being updated.

Personal Livescore

This plugin has a very interesting history, which I’ll dive into below. It doesn’t exist anymore, though.

WordPress Placeholder

WordPress Placeholder was a quick and simple function for inserting image placeholders in your design or code. Add the shortcode in your post or page (or straight into your template) and get a customized placeholder. Pretty easy.

Mortgage Calculator

A modern UI (modern back then) mortgage calculator with email functions, multiple themes, results template and easy integration. It calculates standard mortgage payment, mortgage rate based on payment and term, and APR based on payment, term, and fees paid. I’ve reused this plugin with several real estate agents over time and I have improved it, but eventually it died. Mortgage calculators, and the entire financial niche actually, can get pretty spammy, and it’s hard to market.

Smart Backup with Scheduler

Another great plugin with lots of downloads, Smart Backup was a complete WordPress backup plugin for database and file operations. You could create backups of your complete WordPress installation, files only, or database only. Backups could be restored using phpMyAdmin or various cPanel utilities. Backups could be sent via email as attachments. Amazon S3 backup was available as an on-demand solution. Again, it died, as it relied on several server packages that got obsolete in time.

Also, look at some of the features! Oh, boy.

  1. No bloated features and unnecessary code.
  2. Fast, AJAX-driven options (no page reload).
  3. PHP4 compatibility for older servers.
  4. WordPress 2.8+ compatibility for older versions.
  5. Enhanced .htaccess protection for backups directory.
  6. No external PEAR libraries for ZIP archive generation.

WordPress eCards

This one is really alive and kicking, and it’s one of my flagship WordPress plugins.

Do you remember the golden age of link directories? I was right in the middle of it with a small business based on a link directory website. I also had a WordPress plugin, albeit simpler. So many stories and memories here…

Roo Classifieds

Look at this! “Roo Classifieds is the new kid on the block, a popular classified ads plugin for WordPress. Its feature-rich control panel and straightforward behaviour was built for ease-of-use and tight integration with WordPress. Roo Classifieds is using native custom post types and taxonomies.” It was eventually merged into Roo Framework.

Jobbin Jobs

A job listing plugin. Again, merged into Roo Framework.

You can see how all these plugins, merged into Roo Framework, used the same structure. My initial idea was to generate more sales by going with 3 separate niche plugins. Obviously, maintainability increased 3 times, so, after a few months, I merged everything, combined tutorials, documentation sections and how-to’s and created a behemoth plugin. It does not exist anymore, though.

LoopPress

Same as above, an attempt to use the framework to create a video library. The plugin accepted .mp4, YouTube and Vimeo, if I remember correctly.

Roo Maps

This plugin was a very ambitious experiment created for one of my clients at the time. It made it really easy to put a dynamic map in any post or page. It was able to display unlimited markers loaded from a shortcode. It also had a magnifying glass, and it was built using a lot of jQuery, layers and z-index.

Roo Heatmap

Another good one, a HotJar precursor ? Roo Heatmap generated a click heatmap for your site. Roo Heatmap showed you what’s hot and what’s not, so you could make changes that increased conversions. A heatmap is an easy way to understand what users do on your site. It’s a visual representation showing you where users click and what they do.

Newsletter Tycoon

Another plugin I have heavily used before Wysija and before MailPoet existed. A newsletter plugin, natively integrated into WordPress. An old version has been preserved on GitHub.

WordPress Gold Slider

This plugin has been heavily used on a CGI showcase website, displaying 4 posts at a time in the form of a sliding area. A really revolutionary slider for that time. I still love it after all these years. Check out the video below.

WordPress Query Admin

This was a controversial plugin as it fiddled with the database. Think of it as a phpMyAdmin plugin for WordPress. There were lots of support calls, lots of incompatibilities and database issues. I ended up scrapping it. It’s seen good days, though, especially for shared hosting clients with no access to MySQL.

Personal Livescore

Personal Livescore plugin allows the administrator to run and maintain a live score system without the need to sign up for various web services or feeds. The plugin is completely standalone.

Unlike all the other plugins, this plugin is entire controllable by the administrator, and does not require any third-party account. The plugin is white-labeled and offers an embeddable version for other sites. The embeddable version is 100% mobile/tablet compatible and works in real time.

This plugin started as custom code for a volleyball competition. I was on the beach getting ready to plug into YouTube Live and broadcast several matches live on a sports website. Due to various matches taking place at the same time, someone needed to update the scores in real time on one dedicated page. As this was practically impossible, I whipped up a small plugin to allow for score recording straight into the database, and I had 2 or 3 colleagues adding and changing scores from their mobile phones. This plugin turned into a full-featured plugin. It was one of my most spammed plugins, as lots of sports and iGaming sites tried to promote their businesses in my support forums. The plugin stayed unmaintained for a while, then it got retired from the marketplace.

These are my remaining commercial plugins, which I’m focusing on full time:

Free WordPress Plugins

And these are my free plugins:

More Plugins

Article Reactions

A simple plugin I have coded for myself. Not active anymore.

Metro Mortgage Calculator

A modern UI mortgage calculator with email functions, multiple themes, results template and easy integration. It calculates standard mortgage payment, mortgage rate based on payment and term, and APR based on payment, term, and fees paid.

GitHub

AnyChart

A bespoke plugin I created for a college a long time ago. A simple bar chart custom post generator, based on CSS.

GitHub

WordPress Primary Category

A plugin I coded for an interview to replicate Yoast’s “primary category” feature. Set a primary category for your (custom) posts and query them in your template using native WordPress queries.

GitHub

V5 Star Ratings

Flexible star ratings plugin with multiple options for appearance and behaviour.

GitHub

Bonus

While I was writing this article, I coded another small plugin to help me send bulk emails from a WordPress + SendGrid setup.

Requirements

An email gateway or a third-party email solution such as SendGrid or Mailgun or even Gmail for low-volume emails. Add your email addresses, each on a separate line, compose your email (do not use any special styling, as the CSS is not transferred to the email template. Use headings, paragraphs, images, basic elements.

I use this plugin for short email bursts, 20-40 per week for various client updates and notifications.

Here’s the code, simple and with no dependencies:

<?php
/**
 * Plugin Name: Whiskey Emails
 * Plugin URI: https://getbutterfly.com/
 * Description: Send bulk emails from WordPress.
 * Version: 0.0.1
 * Author: Ciprian Popescu
 * Author URI: https://getbutterfly.com/
 * License: GNU General Public License v3 or later
 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
 */

function whiskey_admin_menu_links() {
    add_menu_page('Whiskey Settings', 'Whiskey Settings', 'manage_options', 'whiskey', 'whiskey_build_admin_page', 'dashicons-admin-home', 3);

    add_submenu_page('whiskey', 'Email', 'Email', 'manage_options', 'whiskey_email', 'whiskey_build_email_page');
}

add_action('admin_menu', 'whiskey_admin_menu_links', 10);

function whiskey_build_admin_page() {
    //
}

function whiskey_build_email_page() {
    $tab = (filter_has_var(INPUT_GET, 'tab')) ? filter_input(INPUT_GET, 'tab') : 'dashboard';

    $section = 'admin.php?page=whiskey_email&amp;tab=';
	?>
    <div class="wrap">
        <h1>Whiskey</h1>

        <h2 class="nav-tab-wrapper">
            <a href="<?php echo $section; ?>dashboard" class="nav-tab <?php echo $tab === 'dashboard' ? 'nav-tab-active' : ''; ?>">Dashboard</a>
            <a href="<?php echo $section; ?>email" class="nav-tab <?php echo $tab === 'email' ? 'nav-tab-active' : ''; ?>">Email</a>
        </h2>

        <?php if ($tab === 'dashboard') { ?>
            <h3>Whiskey</h3>
        <?php } else if ($tab === 'email') { ?>
            <?php
            if (isset($_POST['save_send'])) {
                $bulkEmailSubject = sanitize_text_field($_POST['bulk_email_subject']);
                $bulkEmailBody = stripslashes_deep($_POST['bulk_email_body']);

                $emails = explode(PHP_EOL, $_POST['bulk_email_addresses']);

                foreach ($emails as $email) {
                    wp_mail($email, $bulkEmailSubject, $bulkEmailBody, ['Content-Type: text/html; charset=UTF-8']);
                }

                echo '<div class="updated notice is-dismissible"><p>Email sent successfully!</p></div>';
            }
            ?>

            <h2>Bulk Email</h2>
            <p>Send bulk email to custom email addresses. Use in combination with Gmail SMTP or SendGrid.</p>

            <form method="post">
                <table class="form-table">
                    <tbody>
                        <tr>
                            <th scope="row"><label for="bulk_email_addresses">Email Addresses</label></th>
                            <td>
                                <p>
                                    <textarea id="bulk_email_addresses" name="bulk_email_addresses" class="regular-text large" rows="8"></textarea>
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <th scope="row"><label for="bulk_email_subject">Email Subject</label></th>
                            <td>
                                <p>
                                    <input type="text" id="bulk_email_subject" name="bulk_email_subject" class="regular-text">
                                    <br><small>Use a short and concise subject line.</small>
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <th scope="row"><label for="bulk_email_body">Email Body</label></th>
                            <td>
                                <p>
                                    <?php
                                    wp_editor('', 'bulk_email_body', [
                                        'teeny' => false,
                                        'media_buttons' => false,
                                        'textarea_name' => 'bulk_email_body'
                                    ]);
                                    ?>
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <th scope="row"></th>
                            <td><input type="submit" name="save_send" class="button button-primary" value="Send"></td>
                        </tr>
                    </tbody>
                </table>
            </form>
        <?php } ?>
    </div>
	<?php
}