APPUNTI

Funzioni in fase di abilitazione e disabilitazione di un plugin wordpress

Una delle funzioni principali durante la creazione di un plug-in è la funzione register_activation_hook() che ci consente di attivare e disattivare le funzioni e che viene eseguita quando si attiva il plug-in nella schermata dei plug -in di WordPress .

Questa funzione accetta due parametri:

  • Il percorso del file del plugin principale
  • la funzione da eseguire quando attivata

Successivamente vediamo come viene eseguita la funzione avvia_my_plugin() quando si attiva il plugin:

register_activation_hook(__FILE__, 'avvia_my_plugin');
 
function avvia_my_plugin(){
  // il codice da eseguire in fase di attivazione del plugin
}

Con questa funzione puoi eseguire alcune azioni durante l’attivazione del nostro plugin, come voler verificare se esiste una tabella dati custom e, in manca, crearla ad esempio o avere impostazioni e opzioni predefinite per le nostre esigenze.

Nello stesso modo in cui abbiamo la funzione register_activation_hook() , abbiamo anche la funzione register_deactivation_hook() che viene eseguita quando si disattiva un plugin.  Accetta gli stessi parametri della funzione sorella, come vediamo nell’esempio seguente:

register_deactivation_hook(__FILE__, 'disattiva_my_plugin');
 
function disattiva_my_plugin(){
  // il codice da eseguire in fase di disattivazione del plugin
}

Importante: per il corretto funzionamento del codice, i due hook devono essere dichiarate nel file principale del plugin, mentre le funzioni possono essere anche inseriti in un file incorporato.

Io preferisco inserire questo codice nel file principale del plugin che sto scrivendo:

// Verifico se viene attivato o disattivato il plugin ed eseguo
// la funzione nel file di inclusione
require_once( dirname( __FILE__ ) . '/inc/plug-act-deact.php');
register_activation_hook( __FILE__, 'my_plugin_att');
register_deactivation_hook( __FILE__, 'my_plugin_dis');
// end

Per convenienza di programmazione ho realizzato una classe specifica per un lavoro più accurato, questo il codice che può essere inserito nel plugin come è descritto nelle note del codice:

<?php
/**
 * Class Activate and Disactivate WordPress Plugin EPA
 *
 * Description for Activate and Disactivate WordPress Plugin EPA
 *
 * @link              https://www.paliotti.it
 * @Ver:              1.0.3
 * @package           Plugin_Name_Name_Space
 * @author:           Enzo Paliotti <enzo@paliotti.it>
 * @author URI:       https://www.paliotti.it
 *
 * Per includere ed usare la classe nel codice del plugin che si sta creando,
 * inserire decommentando le seguenti righe di codice nel file principale del plugin:
 *
 * // Includo e carico la classe epa_plugin_menu
 * require_once( dirname( __FILE__ ) . '/class/plugin-stato.php');
 *
 * Per evitare conflitti tra plugin, alla classe viene impostato un nomespace che deve essere dichiarato all'inizio del codice,
 * ad esempio potrebbe essere il nome univoco del plugin oppure anche semplicemente dir_nome_plugin_class_plugin-stato
 * dove dir_nome_plugin è il nome della directory del plugin
 *   
 */
namespace my_name_plugin;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ( !class_exists( 'epa_plugin_stato' ) ) {
	
	class epa_plugin_stato{
		
		public $slug = __NAMESPACE__;
				
		public function __construct() {
			
			$this->slug_plugin = basename( plugin_dir_path(  dirname( __FILE__ , 1 ) ) ) . '/'.basename( plugin_dir_path(  dirname( __FILE__ , 1 ) ) ).'.php';
                        $this->carica_init();
			
		}
                
                private function carica_init() {
			
			register_activation_hook( $this->slug_plugin, [ $this, 'epa_plugin_att']);
			register_deactivation_hook( $this->slug_plugin, [$this, 'epa_plugin_dis']);
					
		}	
		
   	// Funzione che viene richiamata all'attivazione del plugin 
   	public function epa_plugin_att(){
   		
			//exit('Questo è un test per visualizzare azione plugin attivato, commentare o eliminare la riga per mettere in produzione');
   		
   		// Salvo un record nella tabella option con un setup iniziale per il plugin
    		$my_plugin_options = array(
    			'display'=>array('uno' => '1','due' => '2', 'tre' => '3',),
    			'variabili'=>array('var_a' => 'a','var_b' => 'b', 'var_c' => 'c',),    		
    		);
    		update_option( __NAMESPACE__ .'_option', $my_plugin_options, '',  'false' );
   	
       	// Creo una tabella specifica per il plugin
    		global $wpdb;
    		$my_table = $wpdb->prefix . "my_plugin_table";
  			$charset_collate = $wpdb->get_charset_collate();
  			$sql = "CREATE TABLE IF NOT EXISTS $my_table (
  				id_myrecord bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  				name_myrecord varchar(255) NOT NULL,
  				pass_myrecord varchar(255) NOT NULL,
  				data_myrecord datetime NOT NULL,
  				PRIMARY KEY  (id_myrecord)
  			) $charset_collate;";
  			require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
  			dbDelta($sql);    	    
    	}	
    
    	// Funzione che viene richiamata alla disattivazione del plugin 
    	public function epa_plugin_dis(){
    		
    		//exit('Questo è un test per visualizzare azione plugin disattivato, commentare o eliminare la riga per mettere in produzione');
      	
      	// Cancello un record nella tabella option con le opzioni setup del plugin
    		delete_option( __NAMESPACE__ .'_option' );
       
    		// Cancello la tabella specifica del plugin
    		global $wpdb;
    		$my_table = $wpdb->prefix . "my_plugin_table";
    		$sql = "DROP TABLE IF EXISTS $my_table;";
    		$wpdb->query($sql);    	
    
    	}

	}
	
	${__NAMESPACE__.'plugin_stato'} = new epa_plugin_stato; // carico la classe

}

Su questo sito utilizziamo cookie tecnici necessari alla navigazione e funzionali all’erogazione del servizio. Utilizziamo i cookie anche per fornirti un’esperienza di navigazione sempre migliore, per facilitare le interazioni con le nostre funzionalità social e per consentirti di ricevere comunicazioni di marketing aderenti alle tue abitudini di navigazione e ai tuoi interessi.

Puoi esprimere il tuo consenso cliccando su ACCETTA TUTTI I COOKIE. Chiudendo questa informativa, continui senza accettare.

Potrai sempre gestire le tue preferenze accedendo al nostro COOKIE CENTER e ottenere maggiori informazioni sui cookie utilizzati, visitando la nostra COOKIE POLICY.

Privacy Settings saved!
Impostazioni

Quando visiti un sito Web, esso può archiviare o recuperare informazioni sul tuo browser, principalmente sotto forma di cookies. Controlla qui i tuoi servizi di cookie personali.


I cookie tecnici sono necessari al funzionamento del sito web perché abilitano funzioni per facilitare la navigazione dell’utente, che per esempio potrà accedere al proprio profilo senza dover eseguire ogni volta il login oppure potrà selezionare la lingua con cui desidera navigare il sito senza doverla impostare ogni volta.

Rifiuta tutti i Servizi
Accetta tutti i Servizi