If you’re using WordPress and want to add custom features to your site, you don’t always need a theme change or a big developer team. You can do it with a plugin.
This WordPress plugin development tutorial is here to help beginners understand how plugins work and how to build one from scratch. We’ll cover what a plugin is, what files you need, how to handle activation or uninstallation, and best practices to keep your code clean and secure.
By the end of this post, you’ll know how to build your first plugin and even understand how to create something more complex, like a CRUD system.
Table of Contents
What is a WordPress Plugin?
A WordPress plugin is a piece of code that adds new features or changes the behavior of your WordPress site, without touching the core files.
Plugins are like add-ons. They let you do more with your site, such as creating contact forms, adding security tools, making backups, and so much more.
File Requirements for a Plugin
You can start a plugin with just one PHP file. Here’s what the basic structure looks like:
<?php
/*
Plugin Name: My Simple Plugin
Description: WordPress plugin development Tutorial.
Version: 1.0
Author: Your Name
*/
Place this file inside the wp-content/plugins
folder. After that, you’ll see your plugin listed in the WordPress admin under “Plugins.”
You don’t need to match the plugin name with the folder name, and you can add more files later as your plugin grows.
Important Security Check
To stop others from directly accessing your plugin file, always add this at the top:
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
This small line protects your plugin from external attacks.
Activation, Deactivation, and Uninstall
WordPress lets you hook into plugin actions like:
register_activation_hook( __FILE__, 'your_plugin_activate' );
register_deactivation_hook( __FILE__, 'your_plugin_deactivate' );
register_uninstall_hook( __FILE__, 'your_plugin_uninstall' );
When to Use These?
- Activate: Create tables or add settings when the plugin is turned on.
- Deactivate: Clean cache or reset temporary data.
- Uninstall: Remove everything your plugin added (like database tables).
For uninstalling, you can also create a file uninstall.php
to clean things up.

How to Use __FILE__
, plugin_dir_url()
, and plugin_dir_path()
These are useful for pointing to file locations or assets (like images):
echo plugin_dir_url( __FILE__ ) . 'images/icon.png';
This would give a path like:
http://example.com/wp-content/plugins/your-plugin/images/icon.png
If you want the file path (not the URL), use:
If you want the file path (not the URL), use:
$dir = plugin_dir_path( __FILE__ );
Avoid Conflicts: Use function_exists()
and Prefixes
If two plugins have functions with the same name, your site may crash. To avoid this, wrap your functions like this:
if ( ! function_exists( 'myplugin_custom_function' ) ) {
function myplugin_custom_function() {
// your code
}
}
Also, add a unique prefix (like myplugin_
) to all your function and class names.
Licensing: Use GPL for WordPress.org
If you plan to share your plugin on the official WordPress plugin directory, you must use the GPL license (General Public License). WordPress is open-source, and your plugin should be too if you’re distributing it.
Flush Rewrite Rules After Activation
If your plugin adds custom post types or URL rules, remember to refresh permalinks:
function your_plugin_activate() {
flush_rewrite_rules();
}
Skipping this step can lead to 404 errors on custom URLs.
Always Sanitize and Escape Data
To keep your site safe from hackers, use:
sanitize_text_field()
for inputesc_html()
,esc_attr()
, oresc_url()
before output
Example:
$name = sanitize_text_field( $_POST['name'] );
echo esc_html( $name );
Don’t Use wp_
or wordpress_
In Your Plugin Name
Avoid using reserved names like wp_
, wordpress_
, or anything that looks official. It can cause conflicts or get your plugin rejected from WordPress.org.
Use something unique, like your initials or brand name.
Summary and Best Practices
Let’s recap the key points from this WordPress plugin development tutorial:
- Start with one PHP file and a header comment.
- Protect your plugin using
ABSPATH
. - Use activation/deactivation hooks wisely.
- Sanitize input and escape output.
- Prefix all functions and classes.
- Flush rewrite rules when needed.
- Follow GPL if publishing to WordPress.org.
- Avoid reserved names like
wp_
.
Recent Posts
>>How to Create a WordPress Widget to Filter Posts by Category Using AJAX
>>How to Create a Custom Gutenberg Block in WordPress?
Conclusion
Creating a plugin in WordPress might seem technical, but once you understand the basics, it becomes a powerful tool. In this WordPress plugin development tutorial, we’ve covered how to create a plugin, handle security, manage hooks, and follow good practices.
Start small — maybe with a simple feature. As you gain confidence, you can move on to advanced plugins with custom post types, settings pages, or full-featured systems like CRUD.
With time and practice, you’ll be building your tools, improving websites, and even contributing to the WordPress community.