Come scaricare, installare, attivare e sostituire in modo programmatico e automatico i plugin di WordPress
Pubblicato: 2018-09-18Convincere gli utenti a fare qualsiasi cosa è difficile. Che si tratti di compilare un modulo o semplicemente di eseguire pochi clic, c'è una resistenza intrinseca. Anche se quell'azione è per il bene degli utenti, come cambiare una password debole, non lo faranno. Lo stesso vale per convincere gli utenti a installare un plug-in richiesto o, peggio ancora, a sostituire un plug-in attivo con uno nuovo. È una missione limite impossibile.
Per fortuna, con un po' di codice e il consenso dell'utente, possiamo scaricare, installare, attivare, disattivare e persino eliminare i plugin di WordPress. Questo processo automatizzato, se distribuito in modo responsabile, può migliorare drasticamente l'esperienza dell'utente e aumentare i tassi di conversione per le azioni utente necessarie nell'amministratore di WordPress.
Convincere gli utenti a fare qualsiasi cosa è difficile. Allora perché non scaricare, installare e attivare automaticamente i plugin di #WordPress? Bastano poche righe di codice.
CLICCA PER TWEETPerché scaricare, installare e attivare i plugin tramite codice?
Ci sono più scenari ma teoria a parte, diamo un'occhiata alla situazione che WP Reset ha a portata di mano. Ho già scritto un post sul rebranding di reset-wp in WP Reset. Oltre ad altre cose, il processo prevede che le persone che già utilizzano reset-wp lo rimuovano dai loro siti e quindi installino WP Reset. Perché qualcuno dovrebbe farlo solo perché abbiamo chiesto? E anche se vogliono farlo, saranno riluttanti perché è lontano da due clic. Tuttavia, se spieghiamo tutto e lo riduciamo a un pulsante "Sì, vai avanti, sostituisci reset-wp con Reset WP", le cose non sembrano così male.
Non scherzare con i siti delle persone senza il loro permesso! Periodo. Nemmeno se è "una piccola cosa". Questo non e buono. Non è il tuo sito. Avvisa gli utenti di eventuali modifiche quando aggiornano il plug-in o quando aggiungi nuove funzionalità.
A causa delle regole di wp.org che ci impediscono di tracciare le azioni degli utenti (senza il loro consenso, e non volevamo infastidirli con la richiesta) purtroppo non ho numeri da condividere. Ma quello che posso dirti è che non abbiamo avuto lamentele da parte degli utenti reset-wp che hanno eseguito il processo di sostituzione o che hanno appena visto la notifica nel plug-in. E abbiamo eseguito il processo per oltre sette settimane.
Va bene farlo? Agli utenti dispiacerà?
Gli utenti apprezzeranno sicuramente qualsiasi cosa e tutto ciò che fai alle loro spalle! Non farlo! Non fare nulla senza il permesso degli utenti. Soprattutto se il plugin è ospitato su wp.org perché è contro le regole. Se lo fai, gli amministratori rimuoveranno prontamente il tuo plug-in dal repository.
Ma, se chiedi il permesso – “Possiamo sostituire il plugin A con il plugin B? Si prega di confermare." Allora va bene farlo. Il processo di disattivazione ed eliminazione di un plug-in e di download e attivazione di un altro richiede più di pochi clic. Quindi, se riesci ad automatizzare quel processo e ridurlo a un clic, gli utenti saranno contenti.
Un processo simile di attivazione dei plug-in richiesti per i temi è in atto da anni e gli utenti sono d'accordo. Invece di seguire più collegamenti per installare i plug-in, confermano che sono a posto con il processo e diversi plug-in vengono installati con un clic.
Come al solito, è necessario pochissimo codice
In pseudo codice questa è l'idea generale di ciò che vogliamo fare:
// pseudo code only! // DO NOT copy & paste var $old_plugin; var $new_plugin; if ( is_plugin_installed( $new_plugin ) ) { // new plugin is already installed // make sure we have the last version upgrade_plugin( $new_plugin ); } else { install_plugin( $new_plugin ); } if ( !is_plugin_active( $new_plugin ) ) { // new plugin is not active - activate it activate_plugin( $new_plugin ); } // deactivate old plugin deactivate_plugin( $old_plugin ); // if needed delete old plugin delete_plugin( $old_plugin ); // pseudo code only! // DO NOT copy & paste
È abbastanza semplice e diretto. Finché l'utente ha i permessi di file corretti impostati, tutto andrà liscio. L'intera sostituzione non richiede più di un secondo o due per essere completata.
Abbiamo bisogno di alcune funzioni
Per fortuna WordPress ha la maggior parte delle funzioni di cui abbiamo bisogno fatte o semi-fatte, quindi è una questione di mettere insieme le cose.
Un concetto cruciale da capire è come WordPress identifica un plugin, come sa quale plugin è quale. Lo fa tramite plug-in slug, una combinazione del nome della cartella del plug-in e del file PHP principale. Ad esempio: ciao-dolly/ciao-dolly.php. Il file PHP principale è il file con le intestazioni del plugin. Per ottenere lo slug esegui plugin_basename( __FILE__ )
. Ogni volta che devi controllare se un plugin è attivo o vuoi fare qualcosa con esso, devi usare lo slug del plugin. Questo slug è simile ma non uguale allo slug di wp.org. Nel repository, lo slug è solo il nome della cartella, senza il nome del file. Quindi, per Hello Dolly è "ciao-dolly". Non ne abbiamo bisogno al momento, ma deve essere chiarito. Per una lettura più approfondita su questo argomento alquanto confuso, dai un'occhiata a questo thread su Stack Exchange.
WordPress identifica i plugin in base al loro slug, ad esempio hello-dolly/hello-dolly.php. Per ottenere lo slug, esegui plugin_basename( __FILE__ )
nel file principale del plugin.
is_plugin_active( $plugin_slug )
è integrato, quindi non c'è niente da fare per noi. La pagina del codice non rivela molto in più, è una semplice funzione.
is_plugin_installed( $plugin_slug )
non è integrato, ma sono solo poche righe per programmare.
function is_plugin_installed( $slug ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); if ( !empty( $all_plugins[$slug] ) ) { return true; } else { return false; } }
Queste sono tutte le funzioni di test condizionali di cui abbiamo bisogno. Ora per quelli che fanno qualcosa. activate_plugin( )
è integrato e ha quattro parametri, quindi dai un'occhiata alla pagina del Codex a riguardo.

anche deactivate_plugins( $plugin_slug )
è disponibile immediatamente, ma assicurati di notare la "s" (plurale) nel nome delle funzioni. Anch'esso ha alcuni parametri, quindi leggi la pagina del Codex.
install_plugin( $plugin_zip )
è disponibile come parte della classe Plugin_Upgrader
. Non è necessario alcun codice aggiuntivo, solo una nuova istanza di classe. Lo stesso vale per upgrade_plugin( $plugin_slug )
.
function install_plugin( $plugin_zip ) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; wp_cache_flush(); $upgrader = new Plugin_Upgrader(); $installed = $upgrader->install( $plugin_zip ); return $installed; } function upgrade_plugin( $plugin_slug ) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; wp_cache_flush(); $upgrader = new Plugin_Upgrader(); $upgraded = $upgrader->upgrade( $plugin_slug ); return $upgraded; }
wp_cache_flush()
potrebbe non essere necessario, ma l'ho aggiunto solo per sicurezza. Oltre a cose che impiegano 10 ms in più per funzionare, non può fare alcun male.
Mettere tutto insieme
Se stai leggendo questo articolo non per curiosità, ma per una reale necessità di implementare il codice in un plugin, ti consiglio vivamente di installare il plugin reset-wp. Leggere il codice è bello, ma niente è paragonabile ai test in natura.
La mia preferenza è usare admin_action per quasi tutto ciò che non necessita di una GUI di amministrazione completa. Quindi, aggiungi questo alla funzione in cui vengono aggiunte altre azioni e filtri: add_action( 'admin_action_replace_plugin', 'replace_plugin' );
. Quando l'utente apre admin.php?action=replace_plugin, il nostro codice verrà eseguito. Si prega di non codificare quell'URL. Usa qualcosa come: $url = add_query_arg(array('action' => 'replace_plugin'), admin_url('admin.php'));
. La dice lunga sulla qualità del tuo codice.
Ecco il codice che puoi copiare/incollare. Ovviamente, modifica le tre variabili in alto con i tuoi valori.
function replace_plugin() { // modify these variables with your new/old plugin values $plugin_slug = 'wp-reset/wp-reset.php'; $plugin_zip = 'https://downloads.wordpress.org/plugin/wp-reset.latest-stable.zip'; $old_plugin_slug = 'reset-wp/reset-wp.php'; echo 'If things are not done in a minute <a href="plugins.php">click here to return to Plugins page</a><br><br>'; echo 'Starting ...<br><br>'; echo 'Check if new plugin is already installed - '; if ( is_plugin_installed( $plugin_slug ) ) { echo 'it\'s installed! Making sure it\'s the latest version.'; upgrade_plugin( $plugin_slug ); $installed = true; } else { echo 'it\'s not installed. Installing.'; $installed = install_plugin( $plugin_zip ); } if ( !is_wp_error( $installed ) && $installed ) { echo 'Activating new plugin.'; $activate = activate_plugin( $plugin_slug ); if ( is_null($activate) ) { echo '<br>Deactivating old plugin.<br>'; deactivate_plugins( array( $old_plugin_slug ) ); echo '<br>Done! Everything went smooth.'; } } else { echo 'Could not install the new plugin.'; } } function is_plugin_installed( $slug ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); if ( !empty( $all_plugins[$slug] ) ) { return true; } else { return false; } } function install_plugin( $plugin_zip ) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; wp_cache_flush(); $upgrader = new Plugin_Upgrader(); $installed = $upgrader->install( $plugin_zip ); return $installed; } function upgrade_plugin( $plugin_slug ) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; wp_cache_flush(); $upgrader = new Plugin_Upgrader(); $upgraded = $upgrader->upgrade( $plugin_slug ); return $upgraded; }
Il codice utilizza tutto ciò che abbiamo già discusso. La GUI e i messaggi sono molto semplici, quindi aggiungi un po' di CSS o carica l'URL in una lightbox come abbiamo fatto in reset-wp.
L'esecuzione automatica di attività banali noiose per gli utenti è sempre un enorme vantaggio per #UX. Scopri come scaricare, installare e attivare facilmente più plugin #WordPress con un solo clic.
CLICCA PER TWEETUn clic è sempre meglio di dieci
Avere utenti che fanno clic una volta invece di dieci volte è sempre una cosa positiva! È un segno di buona UX (esperienza utente). Quindi, se il tuo plugin o tema richiede altri plugin, ti consiglio di implementare una procedura di installazione con un clic per tutte le dipendenze. Riceverai senza dubbio meno ticket di supporto dalle persone nelle prime fasi di utilizzo del plug-in.
Per quanto riguarda la sostituzione di un plug-in con un altro, cerca di stare fuori da queste situazioni. A volte è inevitabile, ma il problema è che non riuscirai mai a far passare tutti gli utenti al nuovo plug-in, il che significa che devi supportare due plug-in o abbandonare e deludere una parte della tua base di utenti che continua a utilizzare il vecchio plug-in. Affrontiamo la stessa decisione con reset-wp e non ci piace nessuna di queste due soluzioni