Par Johan

Avatar de Johan

Design patern d’un plugin WordPress

Après avoir fais de nombreux plugins pour WordPress je vous présente comment j’organise mes gros développements. Cette structure est faite pour ne pas surcharger WordPress en dehors des pages où c’est vraiment nécessaire.

Ce modèle de plugin n’est pas parfait, donc si vous voyez des améliorations à apporter, n’hésitez pas à commenter et à proposer vos solutions.

<?php
/*
Plugin Name: Plugin Patern
Plugin URI: Link to plugin information
Description: Plugin Description
Author: Desmyter Johan
Author URI: Link to the author's web site
Version: Must be set in the plugin for WordPress 2.3+
Text Domain: Optional. Unique identifier, should be same as the one used in
	plugin_text_domain()
Domain Path: Optional. Only useful if the translations are located in a
	folder above the plugin's base path. For example, if .mo files are
	located in the locale folder then Domain Path will be "/locale/" and
	must have the first slash. Defaults to the base folder the plugin is
	located in.
Network: Optional. Specify "Network: true" to require that a plugin is activated
	across all sites in an installation. This will prevent a plugin from being
	activated on a single site when Multisite is enabled.
*/
 
#########
# Déclaration des constantes
#########

define('MY_PLUGIN_PATH', dirname(__FILE__).'/');
 
#########
# Chargement de la/les classes principales toujours nécessaires et des fonctions génériques
#########

require_once(MY_PLUGIN_PATH.'main.class.php');
require_once(MY_PLUGIN_PATH.'functions.php');
 
#########
# Gestion de la partie admin
#########

if(is_admin()){ 
 
	/**
	 * Cette fonction sert à définir les différentes pages dans le menu d'administration
	 */
	function my_admin_menu() {
 
		// ajout d'une page object (en dessous de Page, Articles, Commentaire, etc...)
		add_object_page('my_object', __('My object'), 5, __FILE__, 'my_function_for_this_admin_page');
 
			// Ajout des sous-pages
			$headingpage = add_submenu_page(__FILE__, 'headingpage', __('Heading page'), 5, __FILE__, "function_heading_page");
			$subpage1 = add_submenu_page(__FILE__, 'subpage1', __('Subpart 1'), 5, 'plugin_directory/subpart1.php', "function_subpart1");
			$subpage2 = add_submenu_page(__FILE__, 'subpage2', __('Subpart 2'), 5, 'plugin_directory/subpart2.php', "function_subpart2");
			$subpage3 = add_submenu_page(__FILE__, 'subpage3', __('Subpart 3'), 5, 'plugin_directory/subpart3.php', "function_subpart3");
 
		/**
		 * pour ajouter des pages dans d'autres endroits du menu voyez :
		 * http://codex.wordpress.org/Adding_Administration_Menus
		 */
 
		add_action('admin_print_styles-'.$subpage1, 'subpage1_scripts_and_styles');
		add_action('admin_print_styles-'.$subpage2, 'subpage2_scripts_and_styles');
		add_action('admin_print_styles-'.$subpage3, 'subpage3_scripts_and_styles');
 
	}
	add_action('admin_menu', 'my_admin_menu');
 
	/**
	 * enregistre les CSS et JS du la sous-page 1 ...et même chose pour les sous-pages suivantes
	 */
	function subpage1_scripts_and_styles(){
		/*
		 * Ajout des CSS et des scripts javascript pour cette sous-page
		 * avec wp_enqueue_style() et wp_enqueue_script()
		 */
	}
 
	/**
	 * lance la fonction qui gère la sous-page 1
	 */
	function function_subpart1(){
		require_once(MY_PLUGIN_PATH.'function_subpart1.php');
	}
 
}else{	// On est en front-side
 
	/**
	 * Actions classiques qui peuvent parfois être gérées directement dans
	 * la/les classes principales ou par les fonctions génériques.
	 */ 
 
}
 
#########
# Actions spéciales pour l'activation/désactivation du plugin
#########

/**
 * Activation
 */
register_activation_hook(__FILE__, 'my_fonction_activation');
function my_fonction_activation(){
	require_once(MY_PLUGIN_PATH.'activation.php');
}
 
/**
 * Désactivation
 */
register_deactivation_hook(__FILE__, 'my_fonction_deactivation');
function my_fonction_deactivation(){
	require_once(MY_PLUGIN_PATH.'deactivation.php');
}

Poster un commentaire

Subscribe without commenting