Using anonymous functions to build WordPress plugins

I work in WordPress a lot, so I invariably use plugins to add functionality. Sometimes, if you can't find exactly what you want, you have to roll your own.

Whenever I think "It'd be quick enough to knock up plugin to do that" I get the annoying feeling of having to rewrite the plugin starting point. Deciding on a unique namespace or function prefix, setting up the admin menus, hooking into content, the usual. It's not a huge job, but I hate writing things I've done before.

Yes, I could build a template with the common functions, but that'd still mean changing all th function names, admin menu hooks and so on. Still annoying.

So I put together a template that uses anonymous functions. All I have to do is change the name of the plugin in two places (in an $info array and the initial comment) and that's it. I have an admin hook, admin menu, options namespace with save & load - it's all good to go. Because it uses anonymous functions, there are no conflicts; I can copy & paste the file 10 times if I want, and each copy will activate as a separate plugin.

Here's the template:

Plugin Name: Plugin base
Plugin URI:
Description: Default plugin
Version: 1.0
Author: David
Author URI:


	// Set some global details here

	// Plugin name
	$info=array('name'=>'Plugin base');

	// Options namespace (tied to filename)

	// Update options

	// Get latest options

	// Define admin control panel
		echo $info['name'];

	// Add to admin menu (must appear after function definition)

$p contains all the internal functions. That's where the magic is; $p defines everything on the fly. If multiple plugins are created this way, they're executed one after the other. $p gets overwritten each time and there are no conflicts.

You can even define functions that don't conflict with anything by dropping them into an array:

	return $string;

These will be available in the scope of the $p function and therefore available to all functions defined within. I won't lie - variable scope can get a bit messy, but as long as you're passing variables around you should be OK.

One disadvantage is that anonymous functions are only available in PHP 5.3. And I can't honestly argue that this is any better than using a class definition. Although I use this, it's partly because it was an interesting exercise to put together - I didn't write it for maintenance by anyone else :)


‘Share’ links generator

I don't know about you, but I spend far too much of my time creating those blasted 'Share' links. Well, I did, until I wrote this pair of handy functions.

They will create share links for Facebook, twitter, delicious and StumbleUpon on the fly. Additionally you can pass any URL to create a share link to, and a title if you like.

You can create more definitions very easily by adding to the $types array. Use the terms #URL# and #TITLE# for the URL and title, or #UURL# and #UTITLE# for the urlencode() versions.

function share($type=null,$url=null,$title=null){
	// I store various page data in an $args array.
	// For this function, I'm be using the page title.
	// If you don't have a page title, it'll be ignored.
	global $args;
	// Type definitions
		'tw'=>' #UURL#',
	// Sanity checks
	if(!$type)return 'NO TYPE REQUESTED';
	if(!array_key_exists($type,$types))return 'UNDEFINED TYPE REQUESTED';

	// Build the share link
	return str_replace($find,$replace,$types[$type]);
function thisurl(){
	// Return the full page URL

// Usage:
echo share('fb');
echo share('tw');
echo share('dl');
echo share('su');

PHP and Roman Numerals

After hunting around for functions that convert Arabic numbers to Roman numerals and vice versa, everything I found was huge (~100 lines) except for one very graceful function to convert Arabic numbers to Roman numerals. So I combined it with my own Roman to Arabic converter.

Pass it an int, a numeric string or a string of Roman numerals, and it will convert from one to the other.

Feel free to use the function in your own projects, but please keep the attributions intact.

function roman($num){
		'M' =>1000,
		'D' =>500,
		'C' =>100,
		'L' =>50,
		'X' =>10,
		'V' =>5,
		'I' =>1
		// To Roman:
		foreach($numerals as $roman=>$value){
		// To Arabic:
	return $result;

// Usage
echo roman('1000'); // M
echo roman(1100);   // MC
echo roman('MC');   // 1100
Filed under: PHP No Comments