how to create a wordpress plugin

23
How To Create A WordPress Plugin  Posted on July 17 by Andy Leverenz in Tips & Tricks | 44 comments WordPress Plugins allow users to easily modify, customize, and enhance any WordPress website. Instead of changing the core software WordPress is built on you can rather create a plugin to extend it. Using plugins allows you to have the most optimized WordPress installation all while maximizing how you use the software to begin with. This article will walk you through the steps in creating a WordPress plugin.  What is a WordPress Plugin? Here is the basic definition found on the WordPress Codex. WordPress Plugin:  A WordPress Plugin is a program, or a set of one or more functions, written in the PHP scripting language, that adds a specific set of features or services to the WordPress weblog, which can be seamlessly integrated with the weblog using access points and methods provided by the WordPress Plugin Application Program Interface (API). Creating a Plugin When creating a WordPress plugin there are some standards to uphold to when doing so. Below I’ll outline some key points to remember when creating your own.  Plugin Name

Upload: joca

Post on 28-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 1/23

How To Create A WordPress Plugin Posted on July 17 by Andy Leverenz in Tips & Tricks | 44 comments

WordPress Plugins allow users to easily modify, customize, and enhance any WordPress

website. Instead of changing the core software WordPress is built on you can rather create a

plugin to extend it. Using plugins allows you to have the most optimized WordPress

installation all while maximizing how you use the software to begin with.

This article will walk you through the steps in creating a WordPress plugin.

 What is a WordPress Plugin?

Here is the basic definition found on the WordPress Codex. 

WordPress Plugin: A WordPress Plugin is a program, or

a set of one or more functions, written in the PHP scripting

language, that adds a specific set of features or services to

the WordPress weblog, which can be seamlessly integrated

with the weblog using access points and methods provided

by the WordPress Plugin Application Program Interface

(API). 

Creating a Plugin

When creating a WordPress plugin there are some standards to uphold to when doing so.

Below I’ll outline some key points to remember when creating your own. 

Plugin Name

Page 2: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 2/23

If you’re planning on making a plugin that doesn’t exist yet you will need to first determine its

name. To be extra sure you will want to do a search in the WordPress Plugin repository.

Some developers choose a name that describes more of what the plugin does so the end

user can establish a quick connection with the name. The name itself can be multiple words.

Plugin Files

Typically a plugin lives within its own folder under wp-content/plugins/ inside your

WordPress installation. There is usually at least one PHP file that is typically named after the

plugin. So if your plugin was named amazing-plug  then your PHP file name would most likely

be amazing-plug.php. Using a unique name is crucial so no two plugins use the same

name.

You can also choose to split your plugin into multiple files; similar to the way WordPress is

built. Assets such as images, CSS, and JavaScript are common to see within installed

plugins.

Readme File

Readme files are useful for other developers and users. Usually these files give a quick

description of the plugin as well as sometimes offer change logs which indicate previous

updates and maintenance announcements to users.

Home Page

If you plan to share you plugin with the WordPress community, having a dedicated home

page would be wise. This page can be used as a place to download the plugin, report bugs,

and announce updates to your user community.

Standard Plugin File

 A plugin must contain a bit of meta information which tells WordPress what it is and how to

handle it within your website. Plugins can be installed, deleted, activated, and inactivated. A

standard header is introduced below to establish your plugin’s presence. The parameters

shown will tell WordPress how to optimize it within your website and WordPress admin area.<?php 

/** 

* Plugin Name: My Plugin Name 

* Plugin URI: http://mypluginuri.com/ 

* Description: A brief description about your plugin. 

* Version: 1.0 or whatever version of the plugin (pretty self explanatory) 

* Author: Plugin Author's Name 

* Author URI: Author's website 

* License: A "Slug" license name e.g. GPL12 

*/ 

The minimum WordPress needs to establish your file as a plugin is the linePlugin Name: My Plugin Name

 

Page 3: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 3/23

The rest of the information will be displayed within the Admin area under the Pluginssection.

Programming the Plugin

Now the time comes to create our own demo plugin. I’ll be working on a local copy ofWordPress using the our Divi 2.0 theme. You can follow along whichever method you prefer

but to limit any downtime on your website I suggest you work locally or on a testing server.

Our blog features other posts about installing WordPress locally if you are new to the

concept. Find the links below depending on your platform.

Links:

  How To Install WordPress Locally On A Windows Computer  

  How To Create A Local WordPress Installation On A Mac 

For this tutorial I will be creating a plugin that creates a custom post type for our blog as well

as establishes some other custom parameters. This plugin will be useful because we will be

able to use it among any theme rather than just modifying one.

Plugin ScopeOur plugin will start with a simple PHP file. We will call this file custom-music-

reviews.php. Within our file we will create a custom post type as well as define some new

categories within that post type. The purpose of this plugin will be to write music reviews

within specific genres without needing to touch code in the future. Each review will have a

feature image, excerpt, rating, and genre type.

Starting Off Assuming you have a local copy of WordPress ready to use, navigate to your wp-

content folder inside of a code editor of your choice. Inside that folder you should see a

folder called plugins. Inside of that folder create a new folder called custom-music-

reviews.

With the folder created create a new file inside it called custom-music-reviews.php .

The path to the file should now be wp-content/plugins/custom-music-

reviews/custom-music-reviews.php.

With your new file created we need to add some parameters in comment form like I explained

earlier. For our plugin our parameters will look like this:<?php

 

/** 

* Plugin Name: Custom Music Reviews 

* Plugin URI: http://elegantthemes.com/ 

* Description: A custom music review plugin built for example. 

* Version: 1.0 

* Author: Andy Leverenz 

* Author URI: http://justalever.com/ 

**/ 

Page 4: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 4/23

With this information added, save your file and navigate to your WordPress admin area. Click

on Plugins on the left side navigation and you should now see our plugin available. Wasn’t

that easy?

With our parameters in place our plugin becomes available to activate under “Installed Plugins”. 

Even though our file is empty we can go ahead and activate the plugin. Go ahead and do that

now. You’ll hopefully notice nothing different about your site with the plugin activate. If you do

you probably typed the content above wrong or failed to close the comment.

 Adding Our Plugin Code

With our file all set up and plugin active we can now add the inner workings of the plugin

which we will be using for this tutorial. Add the code below:// Register the Custom Music Review Post Type 

function register_cpt_music_review() { 

$labels 

= array( 

'name' 

=> _x( 'Music Reviews', 'music_review' 

), 

'singular_name' => _x( 'Music Review', 'music_review' ), 

'add_new' 

=> _x( 'Add New', 'music_review' 

), 

'add_new_item' => _x( 'Add New Music Review', 'music_review'), 

'edit_item' => _x( 'Edit Music Review', 'music_review' ), 

'new_item' => _x( 'New Music Review', 'music_review' ), 

'view_item' => _x( 'View Music Review', 'music_review' ), 

'search_items' => _x( 'Search Music Reviews', 'music_review'), 

'not_found' => _x( 'No music reviews found', 'music_review'), 

'not_found_in_trash'  => _x( 'No music reviews found in

Trash', 'music_review' 

), 

'parent_item_colon'  => _x( 'Parent Music Review:','music_review' ), 

'menu_name' => _x( 'Music Reviews', 'music_review' ), 

); 

Page 5: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 5/23

 

$args = array( 

'labels' => $labels, 

'hierarchical' => true, 

'description' => 'Music reviews filterable by genre', 

'supports' => array( 'title', 'editor', 'author','thumbnail', 'trackbacks'

, 'custom-fields', 'comments', 'revisions','page-attributes' 

), 

'taxonomies' => array( 'genres' ), 

'public' => true, 

'show_ui' => true, 

'show_in_menu' => true, 

'menu_position' 

=> 5, 

'menu_icon' 

=> 'dashicons-format-audio', 

'show_in_nav_menus'  => true, 

'publicly_queryable' 

=> true, 

'exclude_from_search' 

=> false, 

'has_archive' 

=> true, 

'query_var' => true, 

'can_export' => true, 

'rewrite' => true, 

'capability_type'  => 'post' 

); 

register_post_type( 'music_review', $args ); 

add_action( 'init', 'register_cpt_music_review' 

); 

This code above may look like a lot and almost seem like an unknown language to you if

you’re new to WordPress but if not you’ll recognize this code as a Custom Post Type. In this

case our custom post type is called music_review. The code is essentially telling WordPress

to establish a new type of post within your theme. The post type has parameters that go

along with it such as labels, arguments, and more. I won’t go into a ton of detail on how

Custom Post Types work because I’ve already covered it within another article on Elegant

Themes. Be sure to read it to gain a full understanding.

With our post type set up you can already see it active within the WordPress admin area.

Our custom post type is successfully implemented.

Lets take things one set further and include a custom Taxonomy called Genre inside our

plugin. Think of a Taxonomy as a type of categorizing feature that is completely custom.

WordPress already includes Categories and Tag support by default but developers can

create custom taxonomies to extend their themes or plugins even further.

Read more about WordPress Taxonomies here. 

Page 6: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 6/23

 Add the code below under the custom post type function we just added.

function genres_taxonomy() { 

register_taxonomy( 

'genres', 

'music_review', 

array( 

'hierarchical' 

=> true, 

'label' 

=> 'Genres', 

'query_var' 

=> true, 

'rewrite' => array( 

'slug' => 'genre', 

'with_front' => false 

); 

add_action( 'init', 'genres_taxonomy'); 

Registering a new Taxonomy is relatively easy. We have made the connection to our custom

post type by using the

register_taxonomy() function which creates a new taxonomy called genres and assigns

it to our post type music_review.

We need to add one more line to our custom post type to make everything sync up. Add this

code just below the supports argument within the custom post type.

Here’s all our plugin code up until this point. For better legibility I’ve stripped our code of any

comments we had prior to this.

function 

register_cpt_music_review() { 

$labels 

= array( 

'name' 

=> _x( 'Music Reviews', 'music_review' 

), 

'singular_name' 

=> _x( 'Music Review', 'music_review' 

), 

'add_new' => _x( 'Add New', 'music_review' ), 

'add_new_item' 

=> _x( 'Add New Music Review', 'music_review'), 

'edit_item' => _x( 'Edit Music Review', 'music_review' ), 

'new_item' => _x( 'New Music Review', 'music_review' ), 

'view_item' => _x( 'View Music Review', 'music_review' ), 

'search_items' => _x( 'Search Music Reviews', 'music_review'), 

'not_found' => _x( 'No music reviews found', 'music_review'), 

'not_found_in_trash'  => _x( 'No music reviews found in

Trash', 'music_review' ), 

'parent_item_colon'  => _x( 'Parent Music Review:','music_review' ), 

'menu_name' => _x( 'Music Reviews', 'music_review' ), 

); 

Page 7: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 7/23

  $args 

= array( 

'labels' 

=> $labels, 

'hierarchical' 

=> true, 

'description' => 'Music reviews filterable by genre', 

'supports' => array( 'title', 'editor', 'author','thumbnail', 'trackbacks'

, 'custom-fields', 'comments', 'revisions','page-attributes' 

), 

'taxonomies' 

=> array( 'genres' 

), 

'public' => true, 

'show_ui' => true, 

'show_in_menu' => true, 

'menu_position' => 5, 

'menu_icon' => 'dashicons-format-audio', 

'show_in_nav_menus'  => true, 

'publicly_queryable'  => true, 

'exclude_from_search' 

=> false, 

'has_archive' => true, 

'query_var' 

=> true, 

'can_export' 

=> true, 

'rewrite' 

=> true, 

'capability_type'  => 'post' 

); 

register_post_type( 'music_review', $args 

); 

add_action( 'init', 'register_cpt_music_review' ); 

function genres_taxonomy() { 

register_taxonomy(  

'genres', 

'music_review', 

array( 

'hierarchical' => true, 

'label' => 'Genres', 

'query_var' => true, 

'rewrite' => array( 

'slug' => 'genre', 

'with_front' => false 

); } 

add_action( 'init', 'genres_taxonomy'); 

Page 8: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 8/23

The only line that changed was the 'taxonomies' => array('genre') line within our

custom post type. I added this line to tell our custom post type to connect to our new

taxonomy and use it instead of the default category or tag structure WordPress comes

installed with.

If you’ve made it this far you can now visit your WordPress admin area and see your new

custom post type and taxonomy(Genres) present. Congrats!

Our custom post type and taxonomy are successfully implemented. Here we can add a new Music Reviewwhich contains various types of genres decided upon by the user.

Getting Our Code To Output

Below I’ll try adding a new music review. You should see the new Genres section that we set

up with our custom Taxonomy. With some data entered I’ll publish the post. 

Page 9: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 9/23

 Create a new music review as an example.

 At this point we have our functionality set up within our plugin.In order to make things effortless we will rely on the plugin to create a new page calledMusic

Reviews. The page will be referenced by our plugin and output any new music reviews the

user posts. We are doing this so the user doesn’t have to edit a single line of code.

Tying it All Together

Our code now works but we should create a page that will use// Function used to automatically create Music Reviews page. 

function create_music_review_pages()  

//post status and options 

$post = array( 

'comment_status' => 'open', 

'ping_status' => 'closed' , 

'post_date' => date('Y-m-d H:i:s'), 

'post_name' => 'music_review', 

'post_status' 

=> 'publish' 

'post_title' 

=> 'Music Reviews', 

'post_type' 

=> 'page', 

); 

//insert page and save the id 

Page 10: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 10/23

  $newvalue = wp_insert_post( $post, false ); 

//save the id in the database 

update_option( 'mrpage', $newvalue ); 

 And finally we need to create our Music Reviews page once the plugin is activated. Adding

the code below initiates the function we just wrote above ( function

create_music_review_pages(){…}).// // Activates function if plugin is activated 

register_activation_hook( __FILE__, 'create_music_review_pages'); 

Testing

Our plugin should be ready to test at this point. Lets create an example music review and see

what outputs.

Create another music review to verify our plugin is working correctly.

If you click View Music Review once the post is published you should be taken to a screen

which looks similar to the image below. Your theme and styles may vary… 

Page 11: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 11/23

 

Page 12: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 12/23

The single page music review template

You may notice that I modified the menu to include our new Music Reviews page. Doing this

gives us easy access.

 Adjusting primary navigation to include “Music Reviews” page 

With your menu in place and saved click on Music Reviews to see all the posts we have

made so far.

Based on the page template supplied by your theme the Music Review should output all

together and be clickable through to the single review template. You will probably notice that

the music review I posted earlier has output as well as the one we just created.

Page 13: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 13/23

 

Page 14: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 14/23

Our music reviews on the “Music Review” page 

Our feature image, title, genre, and review all have posted successfully. Our plugin works! 

To verify, you can deactivate the plugin and reinstall it or activate it. Upon doing so a new

Page called Music Reviews should be created. You can delete or reuse the one from before

if there are duplicates but there should be only one “Music Reviews” page. We could have

added a function to delete and restore this page within our plugin but I wanted to keep things

as simple as possible.

Finish

Our plugin is a relatively simple one. You can extend it so much further by including it’s own

predefined templates, custom widgets, more taxonomies and so much more. Creating a

plugin is no easy feat. You will want to plan your plugin before even moving to development.

Knowing what you can an can’t do with WordPress before coding your own plugin is a crucial

step to developing a quality one. The plugin create in this tutorial is meant to teach by

example. There are better standards to follow and more useful practices to endure. Be sure

to read the WordPress Codex and get familiar with the WordPress Plugin API. If a plugin isn’t

out there and you need custom functionality for your website then I stronger encourage trying

to create your own!

Page 15: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 15/23

Plugin API

Languages: বাল  • English • Español • Français • 日本語 • 한국어 • Português do Brasil •  ไทย • 中文(简体) • Русский • ( Add your

language) 

Contents

  1 Introduction 

  2 Hooks, Actions and Filters 

  3 Function Reference 

  4 Actions 

  4.1 Create an Action Function 

  4.1.1 Avoiding Function Name Collisions 

  4.2 Hook to WordPress 

  4.3 Install and Activate 

  4.4 Current Hooks For Actions 

  5 Filters 

  5.1 Create a Filter Function 

  5.2 Hook in your Filter  

  5.3 Install and Activate 

  5.4 Current Hooks for Filters 

  5.5 Example 

  6 Removing Actions and Filters 

  7 Pluggable Functions 

  8 Activation/Deactivation/Uninstall 

  9 Related 

  10 External Resources 

Introduction

This page documents the API (Application Programming Interface) hooks available to WordPress plugin

developers, and how to use them.

This article assumes you have already read Writing a Plugin, which gives an overview (and many details) of

how to develop a plugin. This article is specifically about the API of "Hooks", also known as "Filters" and

"Actions", that WordPress uses to set your plugin in motion.

These hooks may also be used in themes, as described here. 

Hooks, Actions and Filters

Hooks are provided by WordPress to allow your plugin to 'hook into' the rest of WordPress; that is, to call

functions in your plugin at specific times, and thereby set your plugin in motion. There are two kinds of hooks:

1.  Actions (Codex  Action Reference) 

Page 16: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 16/23

2. Filters (Codex Filter Reference) 

You can sometimes accomplish the same goal with either an action or a filter. For example, if you want your

plugin to change the text of a post, you might add an action function to publish_post (so the post is modified

as it is saved to the database), or a filter function to the_content (so the post is modified as it is displayed in

the browser screen).

For a thorough listing of all action and filter hooks in WP see Adam Brown's WordPress Hooks Database. 

Function Reference

Filter Functions 

has_filter() 

add_filter() 

apply_filters() 

apply_filters_ref_array()  

current_filter()  remove_filter() 

remove_all_filters()  

doing_filter() 

Actions Functions 

has_action() 

add_action() 

do_action() 

do_action_ref_array()  

did_action() remove_action()  

remove_all_actions()  

doing_action() 

Activation/Deactivation/Uninstall Functions 

register_activation_hook()  

register_uninstall_hook()  

register_deactivation_hook()  

 Actions

Actions are triggered by specific events that take place in WordPress, such as publishing a post, changing

themes, or displaying anadministration screen. An Action is a custom PHP function defined in your plugin (or

theme) and hooked , i.e. set to respond, to some of these events. Actions usually do one or more of the

following:

  Modify database data.

  Send an email message.

  Modify the generated administration screen or front-end page sent to a user browser.

The basic steps to make this happen (described in more detail below) are:

1. Create a PHP function that should execute when a specific WordPress event occurs, in your plugin file.

2. Hook this function to the event by using the add_action() function.

3. Put your PHP function in a plugin file, and activate it.

Create an Action Function

The first step in creating an action in your plugin is to create a PHP function with the action functionality of your

plugin, and put it in your plugin file (your plugin file must go into the wp-content/plugins directory). For example,

Page 17: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 17/23

Page 18: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 18/23

  static function send($post_ID) {

$friends = '[email protected],[email protected]';

mail($friends,"sally's blog updated",'I just put something on my blog:

http://blog.example.com' );

return $post_ID;

}

}

add_action('publish_post', array('emailer', 'send'));

This class, called emailer  has a method send  that implements the plugin functionality.

The add_action() function outside of the class adds the action to WordPress that tells it to call the send  method

when a post is published. The array used in the second parameter tells the plugin system to call the static

method of the class 'emailer' named 'send'.

The function send  is protected from the global namespace by the class declaration. It is not possible to callsend() directly, and so any other function named send  will not collide with this one. If you did want to call send(),

you would need to use a scope resolution operator, like this: emailer::send()  

The above example is for static methods. If you have an instance of a class then that won't work. To call a

method of an instance you need to pass the instance as a variable. Consider the above example modified to

take this into account:

class emailer {

function send($post_ID) {

$friends = '[email protected],[email protected]';

mail($friends,"sally's blog updated",'I just put something on my blog:

http://blog.example.com' );

return $post_ID;

}

}

$myEmailClass = new emailer();

Page 19: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 19/23

add_action('publish_post', array($myEmailClass, 'send'));

Classes are a complicated subject. Read more about them in the PHP documentation on classes. 

Hook to WordPress

 After your function is defined, the next step is to "hook" or register it with WordPress. To do this,

call add_action()  in the global execution space of your plugin file:

add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );

where:

hook_name 

The name of an action hook provided by WordPress, that tells what event your function should be

associated with.

your_function_name  

The name of the function that you want to be executed following the event specified by hook_name.

This can be a standard php function, a function present in the WordPress core, or a function defined by

you in the plugin file (such as 'email_friends'defined above).

 priority 

 An optional integer argument used to specify the order in which the functions associated with a

particular action are executed (default: 10). Lower numbers correspond with earlier execution, and

functions with the same priority are executed in the order added to the action.

accepted_args 

 An optional integer argument defining how many arguments your function can accept (default 1), useful

because some hooks can pass more than one argument to your function. This parameter is new in

release 1.5.1.

Return Value 

The (optionally modified) value of the first argument passed to the filter function.

In the example above, we would put the following line in the plugin file:

add_action ( 'publish_post', 'email_friends' );

Likewise, you can also Remove Actions from action hooks. See that section for details.

Install and Activate

The last step in getting your action hook to work is to install the file and activate the plugin. The PHP function

you wrote and theadd_action call must go into a PHP file together, and the PHP file must be installed in

Page 20: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 20/23

the wp-content/plugins directory. Once it is installed, you will need to visit the admin section of WordPress and

activate your plugin; see Managing Plugins for more details.

Current Hooks For Actions

See Plugin API/Action Reference for a current list of action hooks in WordPress, and links to previous versions

of WordPress.

Filters

Filters are functions that WordPress passes data through, at certain points in execution, just before taking

some action with the data (such as adding it to the database or sending it to the browser screen). Filters sit

between the database and the browser (when WordPress is generating pages), and between the browser and

the database (when WordPress is adding new posts and comments to the database); most input and output in

WordPress passes through at least one filter. WordPress does some filtering by default, and your plugin can

add its own filtering.

The basic steps to adding your own filters to WordPress (described in more detail below) are:

1. Create the PHP function that filters the data.

2. Hook to the filter in WordPress, by calling add_filter(). 

3. Put your PHP function in a plugin file, and activate it.

Create a Filter Function

 A filter function takes as input the unmodified data, and returns modified data (or in some cases, a null value to

indicate the data should be deleted or disregarded). If the data is not modified by your filter, then the originaldata must be returned so that subsequent plugins can continue to modify the value if necessary.

So, the first step in creating a filter in your plugin is to create a PHP function to do the filtering, and put it in your

plugin file (your plugin file must go into the wp-content/plugins directory). For example, if you want to make sure

that your posts and comments contain no profanity, you might define a variable with a list of forbidden words,

and then create the following PHP function:

function filter_profanity( $content ) {

$profanities = array('badword','alsobad','...');

$content = str_ireplace( $profanities, '{censored}', $content );

return $content;

}

Why does this work without a loop? Because $profanities is an array, and  str_ireplace loops through the array

for you. Thestr_ireplace function is used instead of  str_replace because str_ireplace is case insensitive. 

Page 21: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 21/23

NOTE: Keep in mind that other plugins or the WordPress core may already be using the function name you

have thought of. See thePlugin Development Suggestions for more information.

Hook in your Filter

 After your function is defined, the next step is to "hook" or register it with WordPress. To do this,

call add_filter()  in the global execution space of your plugin file:

add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] );

where:

hook_name 

The name of a filter hook provided by WordPress, which defines when your filter should be applied.

your_filter 

The name of the function that you want to use for filtering. This can be a standard PHP function, a

function present in the WordPress core, or a function defined by you in the plugin file.

 priority 

 An optional integer argument that can be used to specify the order in which the functions associated

with a particular filter are executed (default: 10). Lower numbers correspond with earlier execution, and

functions with the same priority are executed in the order in which they were added to the filter.

accepted_args 

 An optional integer argument defining how many arguments your function can accept (default 1), useful

because some hooks can pass more than one argument to your function.

In the example above, we would put the following in the main executing section of the plugin file, to tell

WordPress to filter comments for profanity:

add_filter( 'comment_text', 'filter_profanity' );

You can also remove filters from filter hooks using the remove_filter()  function. See Removing Actions and

Filters. 

Install and Activate

The last step in getting your filter hook to work is to install the file and activate the plugin. The PHP function you

wrote and theadd_filter() call must go into a PHP file together, and the PHP file must be installed in

the wp-content/plugins directory. Once it is installed, you will need to visit the admin section of WordPress and

activate your plugin; see Managing Plugins for more details.

Current Hooks for Filters

See Plugin API/Filter Reference for a current list of filter hooks in WordPress, and links to previous versions of

WordPress.

Page 22: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 22/23

Example

This is an example, as described by Ozh on the wp-hackers email list, for a plugin to modify (or overwrite) the

default bloginfo()f unction. This will require modifying a core function behavior.

add_filter( 'bloginfo', 'mybloginfo', 1, 2 );

add_filter( 'bloginfo_url', 'mybloginfo', 1, 2 );

function mybloginfo( $result='', $show='' ) {

switch ( $show ) {

case 'wpurl':

$result = SITE_URL;

break;

case 'template_directory':

$result = TEMPL_DIR;

break;

default:

}

return $result;

}

Removing Actions and Filters

In some cases, you may find that you want your plugin to disable one of the actions or filters built into

WordPress, or added by another plugin. You can do that by

calling remove_filter('filter_hook','filter_function')  or remove_action('action_hook','

action_function') .

For example, remove_action('publish_post','generic_ping');  would prevent your weblog from

sending pings whenever a new post is created.

Page 23: How to Create a WordPress Plugin

7/25/2019 How to Create a WordPress Plugin

http://slidepdf.com/reader/full/how-to-create-a-wordpress-plugin 23/23

Note that if a hook was registered using a priority other than the default of 10, then you must also specify the

priority in the call toremove_action() . Also note that in general, you shouldn't remove anything unless you

know what it does and why it does it -- check the WordPress or other plugin source code to be sure.

Pluggable Functions

Besides the hooks (actions and filters) described above, another way for a plugin to modify WordPress's

behavior is to override WordPress functions. In fact, there is a small set of functions WordPress intends for

plugins to redefine. These are called Pluggable Functions and they are defined in wp-includes/pluggable.php. 

WordPress loads these functions only if they are still undefined after all plugins have been loaded. For more

details examine wp-settings.php file.

 Activation/Deactivation/Uninstall

If your plugin has tasks to complete only at activation or deactivation time, it can

use register_activation_hook  andregister_deactivation_hook . Many plugins do not need to usethese, as the plugins only modify current behavior. However, if your plugin (for example) needs to change a

default option on activation, it can use these functions.

Creating Tables with Plugins has an example using the register_activation_hook  function to make the

database compatible with the current version of the plugin.

The register_uninstall_hook  gives your plugin the option of cleaning up after itself when it is deleted

from the WordPress installation. Users have reasons to temporarily deactivate plugins, so do not do anything

from the deactivation hook that would lose any user settings. This is what the uninstall hook is for.