A plugin file structure helps organize your WordPress plugin files clearly. It makes your plugin easy to understand, maintain, and extend.
Plugin file structure in Wordpress
my-plugin/
├── my-plugin.php
├── readme.txt
├── assets/
│ ├── css/
│ ├── js/
│ └── images/
├── includes/
│ ├── functions.php
│ └── class-my-plugin.php
└── languages/
└── my-plugin.potThe main plugin file (my-plugin.php) is required and contains plugin info and main code.
Folders like assets, includes, and languages help keep files organized by type.
my-plugin.php
<?php
/*
Plugin Name: My Plugin
Description: A simple example plugin.
Version: 1.0
Author: You
*/
// Plugin main code hereincludes folder.includes/functions.php
<?php
function my_plugin_helper() {
// Helper function code
}assets/css folder.assets/css/style.css
/* Plugin styles go here */This simple plugin adds a greeting message at the bottom of every page using the footer hook.
<?php /* Plugin Name: Simple Greeting Description: Shows a greeting message. Version: 1.0 Author: You */ // Hook to add greeting to the footer add_action('wp_footer', function() { echo '<p style="text-align:center;">Hello from Simple Greeting plugin!</p>'; });
Always keep the main plugin file in the root plugin folder.
Use folders to separate code, styles, scripts, and translations for clarity.
Follow WordPress coding standards for better compatibility and readability.
A clear plugin file structure keeps your code organized and easy to manage.
The main plugin file must have plugin header info for WordPress to detect it.
Use folders like includes, assets, and languages to separate different types of files.
Practice
Solution
Step 1: Understand the main plugin file role
The main plugin file must be a PHP file that contains header comments describing the plugin. This file acts as the entry point for WordPress to recognize and load the plugin.Step 2: Differentiate file types in plugin structure
CSS, JavaScript, and image files are used for styling, scripting, and visuals but are not the main plugin file.Final Answer:
A PHP file with plugin header comments -> Option AQuick Check:
Main plugin file = PHP with header [OK]
- Choosing CSS or JS files as main plugin file
- Thinking image files can be main plugin file
- Ignoring the required plugin header comments
Solution
Step 1: Understand folder organization best practices
Separating PHP files into an 'includes' folder and assets like CSS and JS into an 'assets' folder keeps the plugin organized and easier to maintain.Step 2: Evaluate other options
Putting all files in root or a single folder makes the plugin messy. Having no folders limits scalability.Final Answer:
Separate PHP files into a 'includes' folder and assets into 'assets' folder -> Option DQuick Check:
Organize by type in folders = B [OK]
- Mixing all files in root folder
- Putting everything inside 'assets' folder
- Not using folders at all
my-plugin/
my-plugin.php
includes/
functions.php
assets/
style.css
script.jsWhich file should contain the plugin header comments?
Solution
Step 1: Identify the main plugin file
The main plugin file is the one in the root folder named after the plugin, here 'my-plugin.php'. This file must have the plugin header comments.Step 2: Understand roles of other files
Files in 'includes' and 'assets' folders hold supporting code and styles/scripts but do not contain the plugin header.Final Answer:
my-plugin.php -> Option BQuick Check:
Main plugin file = my-plugin.php [OK]
- Putting header in includes/functions.php
- Thinking CSS or JS files hold plugin info
- Confusing folder files with main plugin file
plugin-folder/
plugin-folder.php
includes.php
assets/
style.cssWhat is wrong with this structure?
Solution
Step 1: Check folder vs file naming conventions
Typically, 'includes' is a folder holding PHP files, not a single PHP file named 'includes.php'. This breaks organization.Step 2: Validate other options
The main plugin file name is fine if it matches the folder. 'assets' is a common folder name for CSS/JS. CSS files are allowed.Final Answer:
The 'includes.php' file should be a folder named 'includes' -> Option CQuick Check:
'includes' must be a folder, not a file [OK]
- Renaming main plugin file unnecessarily
- Renaming 'assets' folder incorrectly
- Thinking CSS files are not allowed
Solution
Step 1: Understand language file organization
WordPress plugins commonly use a 'languages' folder to store translation files (.mo, .po). This keeps translations separate and organized.Step 2: Evaluate other options
Putting translations in 'assets' mixes code and assets. Including translations in PHP file is not practical. Separate plugin for translations is unnecessary.Final Answer:
Add a 'languages' folder for translation files and keep main PHP file in root -> Option AQuick Check:
Use 'languages' folder for translations [OK]
- Mixing translation files with CSS/JS
- Embedding translations inside PHP code
- Creating separate plugin for translations
Ready to prove it?
Pass the test and this pattern moves unknown
