====== Hello World Plugin Extended ======
This tutorial will go through the creation of a version of the Hello World plugin which will:
* Allow for internal plugin strings to be internationalizable
* Allow the administrator to set custom messages for the footer besides "Hello World" from the administration panel
* Show how to save data to the ''data/other/'' path
===== File structure =====
Create the following files/folders:
- hello_world.php
- hello_world (directory)
- .htaccess (with one line: Deny from all)
- admin.php
- common_functions.php
- lang (directory)
- .htaccess (with one line: Deny from all)
- en_US.php
===== hello_world.php =====
Here is where we register the plugin. We shall start out by defining some useful constants (this will be cleaner than defining global variables like ''$thisfile'' and referencing them later - just give the constants informative names):
Next, we load the internationalized strings that are in the plugin's ''/lang'' directory (which we will define soon):
// === Internationalization ===
i18n_merge(HELLO_WORLD) || i18n_merge(HELLO_WORLD, 'en_US'); // Loads English language file by default
We will define a number of helpful functions in a separate file, ''common_functions.php'', and load them at this point:
// === Load functions ===
require_once(HELLO_WORLD_PLUGINPATH . 'common_functions.php');
Then we register the plugin. Note that this uses one of the assumed functions that we will define, ''hello_world_i18n'', where there will be language-dependent strings (namely for the plugin name and description):
// === Plugin, Hook and Filter Registration ===
register_plugin(
HELLO_WORLD, // Plugin id
hello_world_i18n('PLUGIN_NAME'), // Plugin name
'0.1.0', // Plugin version
'You', // Plugin author
'http://www.you.com', // Author website
hello_world_i18n('PLUGIN_DESCRIPTION'), // Plugin description
'theme', // Page type - on which admin tab to display
'hello_world_admin' // Main function (administration)
);
Lastly, we register the plugin hooks - in this case, one for loading a sidebar menu item, and another for the theme footer:
// Echoes message in footer
add_action('theme-footer', 'hello_world_footer');
// Creates sidebar link
add_action('theme-sidebar', 'createSideMenu', array(HELLO_WORLD, hello_world_i18n('PLUGIN_SIDEBAR')));
This is the full file:
// Alias for getting i18n strings for this plugin
function hello_world_i18n($key) {
return i18n_r(HELLO_WORLD . '/' . $key);
}
// Administration panel
function hello_world_admin() {
// ...
}
// Hook for the theme footer
function hello_world_footer() {
// ...
}
Now consider the operations that we want to have for the plugin data. The administrator will be able to create a custom message, save it, and then this message will be printed in the theme footer. So we shall create functions for saving this message into a file the ''data/other'' folder. To future-proof this plugin, we will save the data as ''key=>value'' pairs, so the message will be a value with a designated key (ideally the key ''message''):
// Given an array of key=>value mappings, save that data to the configuration file
function hello_world_save_config($config = array()) {
$file = HELLO_WORLD_CONFIGFILE;
$contents = json_encode($config); // Encodes the array into a valid JSON string
return file_put_contents($file, $contents); // Saves the JSON string into the configuration JSON file
}
// Load plugin configuration from the JSON file as an array
function hello_world_get_config() {
$file = HELLO_WORLD_CONFIGFILE;
$contents = file_get_contents($file);
$json = json_decode($contents); // Decodes the string
$config = (array) $json; // Converts the object into a PHP array
return $config;
}
When the plugin is first loaded, the configuration file might not exist. So let's create some utility functions that detect if the file exists, and which create some default data:
// Check that the configuration file exists
function hello_world_config_exists() {
return file_exists(HELLO_WORLD_CONFIGFILE);
}
// Create a default configuration file
function hello_world_init() {
$config = array('message' => hello_world_i18n('HELLO_WORLD'));
return hello_world_save_config($config);
}
Now we can expand on the administration panel. First we ensure that the configuration file exists:
// Administration panel
function hello_world_admin() {
// Initialize the configuration file
$init = hello_world_config_exists() || hello_world_init();
// ...
}
Then we will load the configuration data, and load the ''admin.php'' file (which will use this data and display the admin panel):
// Administration panel
function hello_world_admin() {
// Initialize the configuration file
$init = hello_world_config_exists() || hello_world_init();
// still more to add...
// Show the admin panel page
$config = hello_world_get_config();
include(HELLO_WORLD_PLUGINPATH . '/admin.php');
}
The admin panel will have a ''