Pense-Bête plugins pour WordPress : ajouter une page d’options

En développant certains plugins, nous avons fréquemment besoin d’utiliser des options réglables par l’administrateur. WordPress fourni un système simple et performant pour cela.

Cet article fait partie d’une série d’articles qui présente les éléments que l’on doit constamment avoir sous la main durant le développement d’un plugin pour WordPress (à défaut de les connaître par cœur).

Ci-dessous, un exemple de code simple de plugin qui ajoute une page dans l’interface d’administration. Cette page permet de sélectionner une page dans la liste des pages du blog et de l’enregistrer en temps qu’option.

L’option ainsi réglées sera accessible de n’importe où dans le plugin (ou un autre d’ailleurs) grâce au code :

get_option('mon_plugin_option_account_page')

Il s’agit d’un plugin développé sous forme de classe, compatible PHP5 uniquement (utilisation de _construct). Ce plugin n’est donc pas compatible avec une installation de WordPress sous PHP4. Il n’est pas non plus compatible avec les version de WordPress antérieures à la 2.7

<?
/*
Plugin Name: mon_plugin
Plugin URI: http://www.monplugin.com
Description: Plugin exemple
Author: Spirion
Version: 0.1
Author URI: http://www.spirion.fr
*/

class mon_plugin {
    function __construct()
    {
        // Si je suis dans l'interface d'administration
        if ( is_admin() )
        {
            // On appelle la fonction qui ajoute le menu
            add_action('admin_menu', array(&$this,'mon_plugin_admin_menu'));
            // On appelle la fonction qui initialise les options du plugin
            add_action('admin_init', array(&$this,'mon_plugin_admin_init'));
        }
        else
        {
            // actions à ajouter pour les utilisateurs
        }        
    }

    function mon_plugin_admin_init()
    {
         // On initialise une option qui appartient au groupe d'options "mon_plugin_options" et qui se nomme "mon_plugin_option_account_page"
         register_setting( 'mon_plugin_options', 'mon_plugin_option_account_page' );
    }

    function mon_plugin_admin_menu()
    {
        // On ajoute la page. 8 correspond au niveau de l'utilisateur pour accéder à cette page (8 = administrateur).
        add_options_page('Le nom de la page', 'Nom du plugin affiché', 8, 'Nom unique du plugin', array(&$this,'mon_plugin_options'));
    }

    function mon_plugin_options()
    {
        // Code HTML de la page d'options.
        // La classe css form-table permet d'avoir un style de formulaire comme ceux par défaut dans l'administration de WordPress
        // L'action du formulaire doit être options.php
        ?>
        <div><h2>Configuration du plugin "Mon plugin"</h2>
        <form method="post" action="options.php">
        <table>
        <tr valign="top">
        <th scope="row">Indiquez quelle est la page contenant le short tag</th>
        <td>
        <ul>
        <li>
        <? printf("<label for='mon_plugin_option_account_page'>".__('Front page: %s')."</label>", wp_dropdown_pages("name=mon_plugin_option_account_page&echo=0&show_option_none=".__('- Select -')."&selected=" . get_option('mon_plugin_option_account_page')));?>
        </li>
        </ul>
        </td>
        </tr>
        </table>
        <p>
        <input type="submit" value="Enregistrer les modifications" />
        </p>
        <?
        // Cette fonction ajoute tous les champs invisibles nécessaires pour mettre à jour les options du groupe "mon_plugin_options"
        settings_fields('mon_plugin_options' );
        ?>
        </form>
        </div><?
    }    
}

$my_plugin = new mon_plugin();
?>

Ce qui donne :

capture_mon_plugin