Writting a WordPress Plugin

In my post ‘Changing the WordPress Search Form to HTML5‘ I mentioned it could be a made into a plugin. Today we will have a quick look at writing a plugin. We will be building a useless plugin which does basic word filtering, which will change ‘the’ to ‘da’, though not in any smart way. The plugin will be like the ‘egg’ to ‘duck’ word filter from 4Chan’s Moot which resulted in the DuckRoll MeMe.

Getting started:

  • Create a folder into your WordPress Plugins folder e.g. ‘TheToDa’
  • Create a PHP file in the new folder e.g. TheToDa.php
  • Put the key information about your plugin in the top of your file

The header

[cc lang=”PHP”]

/*

Plugin Name: The to Da – Word Filter
Plugin URI: https://createmycomau.files.wordpress.com/2010/12/thetoda.zip
Description: A silly little plugin which will change all the words ‘the’ to ‘da’
Version: 1.0
Author: Dale Hurley
Author URI: http://createmy.com.au
License: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html

Copyright 2010 Dale Hurley (email : dale@createmy.com.au)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
[/cc]

  • Plugin Name is the name WordPress will show as the name
  • Plugin URI is where the Plugin can be downloaded from
  • Description is a the description used for the plugin which can include some basic HTML
  • Version allows to inform people of the version for upgrades
  • Author and URI creates a link to you
  • License is a URI and the license agreement for the plugin which in this case GPL is being used

Vital, use classes for protection

A lot of plugin tutorials skip over the vital step of wrapping your plugin in a class. By using a class you reduce the chance of code conflict with other plugins. For instance I have seen the function ‘my_admin_init’ used in multiple plugins which will cause WordPress to crash. First we will check that there is no other class with the same name, if there isn’t we will create our class.
[cc lang=”PHP”]if (!class_exists(“the_to_da”))//check that there is no other classes like this
{
class the_to_da //it takes class to use classes
{

}
}//end the check class exists[/cc]

Next we will add our code to create the object using our class.

[cc lang=”PHP”]if (!class_exists(“the_to_da”))//check that there is no other classes like this
{
class the_to_da //it takes class to use classes
{

}
$the_to_da=new the_to_da;//create the new object
}//end the check class exists[/cc]

The functions

Now we will add the function with the same name as the class, this will be executed when the object is called. We will also add our reusable word replace function.

[cc lang=”PHP”]if (!class_exists(“the_to_da”))//check that there is no other classes like this
{
class the_to_da //it takes class to use classes
{
function the_to_da()//construct
{

}

function word_replace($str=”, $from=’the’, $to=’da’)//portable
{

}
}
$the_to_da=new the_to_da;//create the new object
}//end the check class exists[/cc]

The filters

We will add the filters to title, excerpt and content using the add_filter hook. As we are using a class we will use an array to point to the function.

[cc lang=”PHP”] function the_to_da()//construct
{
add_filter(‘the_title’, array(&$this, ‘word_replace’));//add a filter
add_filter(‘the_excerpt’, array(&$this, ‘word_replace’));//add a filter
add_filter(‘the_content’, array(&$this, ‘word_replace’));//add a filter
}[/cc]

Finally we will create our word replace function which is executed any time a title, excerpt or content function is called. This is a dumb word replace, and you would normally use a preg_replace.

[cc lang=”PHP”] function word_replace($str=”, $from=’the’, $to=’da’)//portable
{
return str_replace($from, $to, $str);//replace $from with $to
}[/cc]

Our final code

[cc lang=”PHP”]
/*
Plugin Name: The to Da – Word Filter
Plugin URI: hhttp://createmy.com.au/quick-tip-changing-the-wordpress-search-form-to-html5/
Description: A silly little plugin which will change all the words ‘the’ to ‘da’
Version: 1.0
Author: Dale Hurley
Author URI: http://createmy.com.au
License: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html

Copyright 2010 Dale Hurley (email : dale@createmy.com.au)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

if (!class_exists(“the_to_da”))//check that there is no other classes like this
{
class the_to_da //it takes class to use classes
{
function the_to_da()//construct
{
add_filter(‘the_title’, array(&$this, ‘word_replace’));//add a filter
add_filter(‘the_excerpt’, array(&$this, ‘word_replace’));//add a filter
add_filter(‘the_content’, array(&$this, ‘word_replace’));//add a filter
}

function word_replace($str=”, $from=’the’, $to=’da’)//portable
{
return str_replace($from, $to, $str);//replace $from with $to
}
}
$the_to_da=new the_to_da;//create the new object
}//end the check class exists[/cc]

Conclusion

Creating a plugin is really simple. By following some simple practices you will be pumping out plugins daily.

Two final notes is that you should not close you PHP as any white-space after the close will cause WordPress to die. Second, if you are going to publish your plugin you need to include a readme file.

Check out http://codex.wordpress.org/Writing_a_Plugin

Advertisements

3 comments

  1. Pingback: Facebook Social Graph WordPress Integration | Create My - Dale Mitchell Hurley - Web Developer and Designer

  2. Pingback: My favourite WordPress resources | TautologicalCode


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s