Plugin Directory

Test out the new Plugin Directory and let us know what you think.

Object Oriented Plugin Template Solution

A well engineered template for creating plugins using object-oriented programming practices. Uses Settings API, multisite, i18n, PHPUnit tests.

Multisite Networks

This plugin is coded to be installed in either a regular, single WordPress installation or as a network plugin for multisite installations. So, by default, multisite networks can only activate this plugin via the Network Admin panel.

If you want your plugin to be configurable for each site in a multisite network, follow the instructions in the docblock at the top of admin.php.

Settings API

We add some abstraction around WordPress' Settings API. All you need to do is add some elements to two arrays and maybe create a section header if you want. This is way better than having to write out add_settings_field() calls and creating display and validation callbacks for each and every field.

  1. Open admin.php in your favorite text editor

  2. Read the docblock at the top of the file

Unit Tests

This framework uses PHPUnit, so standard PHPUnit file, class, and method naming practices apply. Our framework requires that your test files and classes:

  • Have a require_once call for TestCase.php at the top of the script. That obtains the PHPUnit and other items needed. It's the only file you need to include.
  • Classes must extend TestCase
  • If you add a setUpBeforeClass() method, it must call parent::setUpBeforeClass()
  • If you add a setUp() method, it must call parent::setUp()
  • If you add a tearDown() method, it must call parent::tearDown()
  • If you add a tearDownAfterClass() method, it must call parent::tearDownAfterClass()

Take a look at the TestLogin.php script for examples of how to handle calls to wp_mail() (and translations of mail messages) and wp_redirect(), the use of database savepoints, and manipulating user metadata.

Please note that the tests make extensive use of database transactions. Many tests will be skipped if your wp_options and wp_usermeta tables are not using the InnoDB storage engine.

To execute the tests, install and activate the plugin, then use a shell to cd into this plugin's directory and call phpunit tests

While it is possible to test plugins using WordPress' Automated Testing PHPUnit framework, it is a complex system, is another dependency, and runs in its own environment. The benefit of using my plugin's PHPUnit is that it ships with the plugin and executes in the users actual WordPress installation. This means any end user can easily test how the plugin interacts with their site.


To produce the machine readable translations used by WordPress' gettext implementation, use the scripts I made for generating all of the .pot, .po and .mo files:

  • cd languages
  • ./makepot.sh
  • Update the headers, version number, etc in the .pot file as desired.
  • To add a new language: touch <plugin-id>-<lc>_<CC>.mo Substitutions: plugin-id: the plugin's identifier ($new_id from above) lc: language code CC: country code
  • ./updatepos.sh
  • Fill the translated text in the .po files.
  • ./makemos.sh

Requires: 3.3 or higher
Compatible up to: 4.4.6
Last Updated: 5 months ago
Active Installs: Less than 10


5 out of 5 stars


Got something to say? Need help?


Not enough data

0 people say it works.
0 people say it's broken.

100,1,1 100,1,1 100,1,1 100,1,1