User Tools

Site Tools


hello_world_plugin_extended

This is an old revision of the document!


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

Create the file structure

- hello_world.php
- hello_world (directory)
   - .htaccess (with one line: Deny from all)
   - admin.php
   - lang (directory) 
      - .htaccess (with one line: Deny from all)
      - en_US.php

hello_world.php

hello_world.php
<?php
<?php
// === Constants ===
define('HELLO_WORLD', basename(__FILE__, '.php'));
define('HELLO_WORLD_PLUGINPATH', GSPLUGINPATH . HELLO_WORLD . '/');
define('HELLO_WORLD_CONFIGFILE', GSDATAOTHERPATH . 'hello_world_config.json');
 
// === Internationalization ===
i18n_merge(HELLO_WORLD) || i18n_merge(HELLO_WORLD, 'en_US');
 
// === Load functions ===
require_once(HELLO_WORLD_PLUGINPATH . 'common_functions.php');
 
// === 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)
);
 
// 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')));

hello_world/lang/en_US.php

en_US.php
<?php
// en_US.php
$i18n = array();
$i18n['PLUGIN_NAME']        = 'Hello World Plugin (Extended)';
$i18n['PLUGIN_DESCRIPTION'] = 'Echoes "Hello World" (or a message of your choice) in theme footers.';
$i18n['PLUGIN_SIDEBAR']     = 'Hello World description';
$i18n['ADMIN']              = 'Hello World Admin Panel';
$i18n['HELLO_WORLD']        = 'Hello World!';
$i18n['SAVE']               = 'Save Configuration';
$i18n['CONFIG_SAVE_SUCCESS'] = 'Configuration saved!';
$i18n['CONFIG_SAVE_ERROR']   = 'Error saving configuration!';

hello_world/admin.php

admin.php
<h3><?php echo hello_world_i18n('ADMIN'); ?></h3>
 
<form method="post">
  <input name="message" value="<?php echo $config['message']; ?>">
  <button name="save-configuration"><?php echo hello_world_i18n('SAVE'); ?></button>
</form>

hello_world/common_functions.php

common_functions.php
<?php
// === Functions ===
// Hook for the theme footer
function hello_world_footer() {
  $config = hello_world_get_config();
  echo '<p>' . $config['message'] . '</p>';
}
 
// 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() {
  // Initialize the configuration file
  $init = hello_world_config_exists() || hello_world_init();
 
  // Check if we need to save the configuration
  $save_changes = isset($_POST['save-configuration']);
 
  if ($save_changes) {
    // Validate and save the config
    $data         = hello_world_validate_config($_POST);
    $save_success = hello_world_save_config($data);
 
    // Display a success/error status message for the admin
    hello_world_display_status_message($save_success);
  }
 
  // Show the admin panel page
  $config = hello_world_get_config();
  include(HELLO_WORLD_PLUGINPATH . '/admin.php');
}
 
// Load plugin configuration into an array
function hello_world_get_config() {
  $file     = HELLO_WORLD_CONFIGFILE;
  $contents = file_get_contents($file);
  $json     = json_decode($contents);
  $config   = (array) $json;
 
  return $config;
}
 
// Save array data to the configuration
function hello_world_save_config($config = array()) {
  $file     = HELLO_WORLD_CONFIGFILE;
  $contents = json_encode($config);
 
  return file_put_contents($file, $contents);
}
 
// Validate an array for saving it as a configuration object
function hello_world_validate_config($data) {
  // Clean up the configuration array...
  $config = array(
    'message' => $data['message'],
  );
 
  return $config;
}
 
// 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);
}
 
// Display the success/error status of a coonfiguration's saving
function hello_world_display_status_message($status) {
  if ($status) {
    $class   = 'success';
    $message = hello_world_i18n('CONFIG_SAVE_SUCCESS');
  } else {
    $class   = 'error';
    $message = hello_world_i18n('CONFIG_SAVE_ERROR');
  }
 
  echo '<div class="' . $class . '">' . $message . '</div>';
}
hello_world_plugin_extended.1485029113.txt.gz · Last modified: 2017/01/21 20:05 by lokothodida