Comment télécharger, installer, activer et remplacer automatiquement et par programme les plugins WordPress
Publié: 2018-09-18Il est difficile d'amener les utilisateurs à faire quoi que ce soit. Qu'il s'agisse de remplir un formulaire ou simplement d'effectuer quelques clics, il existe une résistance inhérente. Même si cette action est pour le bien des utilisateurs, comme changer un mot de passe faible, ils ne le feront pas. Il en va de même pour inciter les utilisateurs à installer un plugin requis, ou pire encore, remplacer un plugin actif par un nouveau. C'est à la limite de la mission impossible.
Heureusement, avec un peu de code et le consentement de l'utilisateur, nous pouvons télécharger, installer, activer, désactiver et même supprimer les plugins WordPress. Ce processus automatisé, lorsqu'il est déployé de manière responsable, peut considérablement améliorer l'expérience utilisateur et augmenter les taux de conversion pour les actions nécessaires de l'utilisateur dans l'administration WordPress.
Il est difficile d'amener les utilisateurs à faire quoi que ce soit. Alors pourquoi ne pas télécharger, installer et activer automatiquement les plugins #WordPress ? Cela ne prend que quelques lignes de code.
CLIQUEZ POUR TWEETERPourquoi télécharger, installer et activer des plugins via le code ?
Il existe plusieurs scénarios, mais la théorie mise à part, examinons la situation que WP Reset a sous la main. J'ai déjà écrit un article sur le changement de marque reset-wp en WP Reset. Outre d'autres choses, le processus implique que les personnes qui utilisent déjà reset-wp le suppriment de leurs sites, puis installent WP Reset. Pourquoi quelqu'un ferait-il cela simplement parce que nous le lui avons demandé ? Et même s'ils veulent le faire, ils seront réticents car c'est loin d'être en deux clics. Cependant, si nous expliquons tout et le résumons à un seul bouton "Oui, allez-y, remplacez reset-wp par Reset WP", alors les choses ne semblent pas si mauvaises.
Ne jouez pas avec les sites des gens sans leur permission ! Période. Pas même si c'est "une toute petite chose". Ce n'est pas cool. Ce n'est pas votre site. Informez les utilisateurs de tout changement lorsqu'ils mettent à jour le plug-in ou lorsque vous ajoutez de nouvelles fonctionnalités.
En raison des règles de wp.org qui nous empêchent de suivre les actions des utilisateurs (sans leur consentement, et nous ne voulions pas les déranger en demandant), je n'ai malheureusement pas de chiffres à partager. Mais ce que je peux vous dire, c'est que nous n'avons reçu aucune plainte de la part des utilisateurs de reset-wp qui ont suivi le processus de remplacement ou qui ont simplement vu la notification dans le plugin. Et nous menons le processus depuis plus de sept semaines.
Est-ce que c'est OK de faire ça ? Les utilisateurs s'en soucieront-ils ?
Les utilisateurs se soucieront sûrement de tout et de rien que vous fassiez dans leur dos ! Ne fais pas ça ! Ne faites rien sans l'autorisation des utilisateurs. Surtout si le plugin est hébergé sur wp.org car cela va à l'encontre des règles. Si vous faites cela, les administrateurs supprimeront rapidement votre plugin du référentiel.
Mais, si vous demandez la permission - "Pouvons-nous remplacer le plugin A par le plugin B ? Veuillez confirmer." Alors c'est OK de le faire. Le processus de désactivation et de suppression d'un plugin, et de téléchargement et d'activation d'un autre prend plus que quelques clics. Donc, si vous parvenez à automatiser ce processus et à le réduire à un seul clic, les utilisateurs seront ravis.
Un processus similaire d'activation des plugins requis pour les thèmes est en cours depuis des années, et les utilisateurs sont d'accord avec cela. Au lieu de suivre plusieurs liens pour installer des plugins, ils confirment qu'ils sont d'accord avec le processus et plusieurs plugins sont installés en un clic.
Comme d'habitude, très peu de code est nécessaire
En pseudo-code, voici l'idée générale de ce que nous voulons faire :
// 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
C'est assez simple et direct. Tant que l'utilisateur dispose des bonnes autorisations de fichier, tout se passera bien. L'ensemble du remplacement ne prend pas plus d'une seconde ou deux.
Nous avons besoin de quelques fonctions
Heureusement, WordPress possède la plupart des fonctions dont nous avons besoin, qu'elles soient terminées ou semi-finies, il s'agit donc de mettre les choses ensemble.
Un concept crucial à comprendre est de savoir comment WordPress identifie un plugin, comment il sait quel plugin est lequel. Il le fait par plugin slug - une combinaison du nom du dossier du plugin et du fichier PHP principal. Par exemple : hello-dolly/hello-dolly.php. Le fichier PHP principal est le fichier avec les en-têtes du plugin. Pour obtenir le slug, exécutez plugin_basename( __FILE__ )
. Chaque fois que vous devez vérifier si un plugin est actif ou si vous voulez en faire quelque chose, vous devez utiliser le plugin slug. Ce slug est similaire mais pas le même que le slug de wp.org. Sur le référentiel, le slug est simplement le nom du dossier, sans le nom du fichier. Donc, pour Hello Dolly, c'est "hello-dolly". Nous n'en avons pas besoin pour le moment, mais cela doit être clarifié. Pour une lecture plus approfondie sur ce sujet quelque peu déroutant, consultez ce fil sur Stack Exchange.
WordPress identifie les plugins par leur slug, c'est-à-dire hello-dolly/hello-dolly.php. Pour obtenir le slug, exécutez plugin_basename( __FILE__ )
dans le fichier principal du plugin.
is_plugin_active( $plugin_slug )
est intégré donc nous n'avons rien à faire. La page du codex ne révèle pas grand-chose de plus, c'est une fonction simple.

is_plugin_installed( $plugin_slug )
n'est pas intégré, mais ce n'est que quelques lignes à coder.
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; } }
Ce sont toutes les fonctions de test conditionnelles dont nous avons besoin. Maintenant pour ceux qui font quelque chose. activate_plugin( )
est intégré et a quatre paramètres donc consultez la page du Codex à ce sujet.
deactivate_plugins( $plugin_slug )
est également disponible prêt à l'emploi mais assurez-vous de noter le « s » (pluriel) dans le nom des fonctions. Il a aussi quelques paramètres alors lisez la page du Codex.
install_plugin( $plugin_zip )
est disponible en tant que partie de la classe Plugin_Upgrader
. Pas besoin de code supplémentaire, juste une nouvelle instance de classe. Il en va de même pour 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()
n'est peut-être pas nécessaire mais je l'ai ajouté juste pour être sûr. En plus des choses qui prennent 10 ms de plus pour fonctionner, cela ne peut pas faire de mal.
Mettre tous ensemble
Si vous lisez cet article non par curiosité, mais par réel besoin d'implémenter le code dans un plugin, je vous suggère fortement d'installer le plugin reset-wp. Lire sur le code est agréable, mais rien ne se compare aux tests dans la nature.
Ma préférence est d'utiliser admin_action pour presque tout ce qui n'a pas besoin d'une interface graphique d'administration complète. Donc, ajoutez ceci à la fonction où d'autres actions et filtres sont ajoutés : add_action( 'admin_action_replace_plugin', 'replace_plugin' );
. Lorsque l'utilisateur ouvre admin.php?action=replace_plugin, notre code s'exécute. Veuillez ne pas coder en dur cette URL. Utilisez quelque chose comme : $url = add_query_arg(array('action' => 'replace_plugin'), admin_url('admin.php'));
. Cela en dit long sur la qualité de votre code.
Voici le code que vous pouvez copier/coller. Évidemment, modifiez les trois variables du dessus avec vos valeurs.
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; }
Le code utilise tout ce dont nous avons déjà parlé. L'interface graphique et les messages sont très basiques, alors ajoutez un peu de CSS ou chargez l'URL dans une lightbox comme nous l'avons fait dans reset-wp.
L'exécution automatique de tâches banales et ennuyeuses pour les utilisateurs est toujours un énorme avantage pour #UX. Découvrez comment vous pouvez facilement télécharger, installer et activer plusieurs plugins #WordPress en un seul clic.
CLIQUEZ POUR TWEETERUn clic vaut toujours mieux que dix
Que les utilisateurs cliquent une fois au lieu de dix fois est toujours une chose positive ! C'est un signe de bonne UX (expérience utilisateur). Donc, si votre plugin ou thème nécessite d'autres plugins, je vous recommande de mettre en œuvre une procédure d'installation en un clic pour toutes les dépendances. Vous obtiendrez sans aucun doute moins de tickets d'assistance de la part des personnes aux premiers stades de l'utilisation du plugin.
Quant au remplacement d'un plugin par un autre, essayez de rester en dehors de ces situations. Parfois, c'est inévitable, mais le problème est que vous n'obtiendrez jamais tous les utilisateurs pour passer au nouveau plugin, ce qui signifie que vous devez soit prendre en charge deux plugins, soit abandonner et décevoir une partie de votre base d'utilisateurs qui continue à utiliser l'ancien plugin. Nous sommes confrontés à la même décision avec reset-wp et n'aimons aucune de ces deux solutions