Wie man WordPress-Plugins programmgesteuert und automatisch herunterlädt, installiert, aktiviert und ersetzt
Veröffentlicht: 2018-09-18Es ist schwierig, Benutzer dazu zu bringen, irgendetwas zu tun. Ob es darum geht, ein Formular auszufüllen oder nur ein paar Klicks auszuführen – es gibt einen inhärenten Widerstand. Selbst wenn diese Aktion zum Wohle der Benutzer ist, wie das Ändern eines schwachen Passworts, werden sie es nicht tun. Gleiches gilt, wenn Sie Benutzer dazu bringen möchten, ein erforderliches Plugin zu installieren, oder noch schlimmer, ein aktives Plugin durch ein neues zu ersetzen. Es ist eine unmögliche Mission.
Glücklicherweise können wir mit ein wenig Code und der Zustimmung des Benutzers WordPress-Plugins herunterladen, installieren, aktivieren, deaktivieren und sogar löschen. Dieser automatisierte Prozess kann, wenn er verantwortungsbewusst eingesetzt wird, die Benutzererfahrung drastisch verbessern und die Konversionsraten für notwendige Benutzeraktionen im WordPress-Adminbereich erhöhen.
Es ist schwierig, Benutzer dazu zu bringen, irgendetwas zu tun. Warum also nicht #WordPress-Plugins automatisch herunterladen, installieren und aktivieren? Es dauert nur ein paar Zeilen Code.
KLICKEN, UM ZU TWEETENWarum Plugins per Code herunterladen, installieren und aktivieren?
Es gibt mehrere Szenarien, aber abgesehen von der Theorie, schauen wir uns die Situation an, die WP Reset zur Hand hat. Ich habe bereits einen Beitrag über das Rebranding von reset-wp in WP Reset geschrieben. Neben anderen Dingen besteht der Prozess darin, Leute, die reset-wp bereits verwenden, dazu zu bringen, es von ihren Websites zu entfernen und dann WP Reset zu installieren. Warum sollte jemand das tun, nur weil wir gefragt haben? Und selbst wenn sie es tun wollen, werden sie zögern, weil es weit von zwei Klicks entfernt ist. Wenn wir aber alles erklären und auf einen Button „Ja, los, reset-wp durch Reset WP ersetzen“ reduzieren, dann sieht es gar nicht so schlecht aus.
Leg dich nicht ohne deren Erlaubnis mit den Websites anderer Personen an! Zeitraum. Nicht einmal, wenn es „ein winzig kleines Ding“ ist. Das ist nicht cool. Es ist nicht Ihre Website. Benachrichtigen Sie Benutzer über Änderungen, wenn sie das Plugin aktualisieren oder wenn Sie neue Funktionen hinzufügen.
Aufgrund der wp.org-Regeln, die uns daran hindern, die Aktionen der Benutzer zu verfolgen (ohne ihre Zustimmung, und wir wollten sie nicht mit Fragen belästigen), habe ich leider keine Zahlen zum Teilen. Aber was ich Ihnen sagen kann, ist, dass wir keine Beschwerden von reset-wp-Benutzern hatten, die den Austauschprozess durchlaufen haben oder nur die Benachrichtigung im Plugin gesehen haben. Und wir betreiben den Prozess seit über sieben Wochen.
Ist es in Ordnung, dies zu tun? Werden die Benutzer etwas dagegen haben?
Die Benutzer werden sich sicherlich um alles kümmern, was Sie hinter ihrem Rücken tun! Tu das nicht! Tun Sie nichts ohne die Erlaubnis der Benutzer. Vor allem, wenn das Plugin auf wp.org gehostet wird, weil das gegen die Regeln verstößt. Wenn Sie das tun, werden Administratoren Ihr Plugin umgehend aus dem Repository entfernen.
Aber wenn Sie um Erlaubnis fragen – „Können wir Plugin A durch Plugin B ersetzen? Bitte bestätigen." Dann ist es in Ordnung, dies zu tun. Das Deaktivieren und Löschen eines Plugins sowie das Herunterladen und Aktivieren eines anderen erfordert mehr als ein paar Klicks. Wenn Sie es also schaffen, diesen Prozess zu automatisieren und auf einen Klick zu reduzieren, werden die Benutzer zufrieden sein.
Ein ähnlicher Prozess zur Aktivierung erforderlicher Plugins für Themes ist seit Jahren im Spiel, und die Benutzer sind damit einverstanden. Anstatt mehreren Links zu folgen, um Plugins zu installieren, bestätigen sie, dass sie mit dem Prozess einverstanden sind, und mehrere Plugins werden mit einem Klick installiert.
Wie üblich wird sehr wenig Code benötigt
Im Pseudocode ist dies die allgemeine Idee dessen, was wir tun möchten:
// 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
Es ist ganz einfach und unkompliziert. Solange der Benutzer die richtigen Dateiberechtigungen eingestellt hat, wird alles reibungslos verlaufen. Der gesamte Austausch dauert nicht länger als ein oder zwei Sekunden.
Wir brauchen ein paar Funktionen
Zum Glück hat WordPress die meisten Funktionen, die wir brauchen, entweder fertig oder halbfertig, also ist es eine Frage der Zusammenstellung der Dinge.
Ein entscheidendes Konzept, das es zu verstehen gilt, ist, wie WordPress ein Plugin identifiziert, wie es weiß, welches Plugin welches ist. Dies geschieht durch den Plugin-Slug – eine Kombination aus dem Namen des Plugin-Ordners und der Haupt-PHP-Datei. Zum Beispiel: hello-dolly/hello-dolly.php. Die Haupt-PHP-Datei ist die Datei mit den Plugin-Headern. Um den Slug zu erhalten, führen plugin_basename( __FILE__ )
. Wann immer Sie überprüfen müssen, ob ein Plugin aktiv ist oder etwas damit machen möchten, müssen Sie den Plugin-Slug verwenden. Dieser Slug ist ähnlich, aber nicht derselbe wie der Slug von wp.org. Im Repository ist der Slug nur der Ordnername ohne den Dateinamen. Für Hello Dolly heißt es also „hello-dolly“. Das brauchen wir im Moment nicht, aber es muss geklärt werden. Weitere Informationen zu diesem etwas verwirrenden Thema finden Sie in diesem Thread auf Stack Exchange.
WordPress identifiziert Plugins anhand ihres Slugs, dh hello-dolly/hello-dolly.php. Um den Slug zu erhalten, führen plugin_basename( __FILE__ )
in der Hauptdatei des Plugins aus.
is_plugin_active( $plugin_slug )
ist eingebaut, also müssen wir nichts tun. Die Codex-Seite verrät nicht viel mehr, es ist eine einfache Funktion.
is_plugin_installed( $plugin_slug )
ist nicht eingebaut, aber es sind nur ein paar Zeilen Code.
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; } }
Das sind alle bedingten Testfunktionen, die wir brauchen. Jetzt für diejenigen, die etwas tun. activate_plugin( )
ist eingebaut und hat vier Parameter, also schauen Sie sich die Codex-Seite darüber an.
deactivate_plugins( $plugin_slug )
ist auch sofort einsatzbereit, aber achten Sie darauf, das „s“ (Plural) im Namen der Funktion zu beachten. Es hat auch ein paar Parameter, also lesen Sie die Codex-Seite.
install_plugin( $plugin_zip )
ist als Teil der Plugin_Upgrader
-Klasse verfügbar. Es ist kein zusätzlicher Code erforderlich, nur eine neue Klasseninstanz. Gleiches gilt für 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()
möglicherweise nicht benötigt, aber ich habe es nur zur Sicherheit hinzugefügt. Abgesehen davon, dass Dinge 10 ms länger dauern, um zu laufen, kann es nicht schaden.
Alles zusammenfügen
Wenn Sie diesen Artikel nicht aus Neugier lesen, sondern den Code in einem Plugin implementieren müssen, empfehle ich Ihnen dringend, das Plugin reset-wp zu installieren. Über Code zu lesen ist nett, aber nichts ist vergleichbar mit dem Testen in freier Wildbahn.
Meine Präferenz ist es, admin_action für fast alles zu verwenden, das keine vollständige Admin-GUI benötigt. Fügen Sie dies also der Funktion hinzu, in der andere Aktionen und Filter hinzugefügt werden: add_action( 'admin_action_replace_plugin', 'replace_plugin' );
. Wenn der Benutzer admin.php?action=replace_plugin öffnet, wird unser Code ausgeführt. Bitte codieren Sie diese URL nicht fest. Verwenden Sie etwas wie: $url = add_query_arg(array('action' => 'replace_plugin'), admin_url('admin.php'));
. Es spricht Bände über Ihre Codequalität.
Hier ist der Code, den Sie kopieren/einfügen können. Ändern Sie natürlich die drei Variablen oben mit Ihren Werten.
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; }
Der Code verwendet alles, was wir bereits besprochen haben. GUI und Nachrichten sind sehr einfach, also fügen Sie ein bisschen CSS hinzu oder laden Sie die URL in eine Lightbox, wie wir es in reset-wp getan haben.
Das automatische Ausführen langweiliger Alltagsaufgaben für Benutzer ist immer ein großes Plus für #UX. Sehen Sie, wie Sie ganz einfach mehrere #WordPress-Plugins mit einem einzigen Klick herunterladen, installieren und aktivieren können.
KLICKEN, UM ZU TWEETENEin Klick ist immer besser als zehn
Wenn Benutzer einmal statt zehnmal klicken, ist das immer eine positive Sache! Es ist ein Zeichen für eine gute UX (Benutzererfahrung). Wenn Ihr Plugin oder Thema also andere Plugins erfordert, würde ich empfehlen, ein Ein-Klick-Installationsverfahren für alle Abhängigkeiten zu implementieren. Sie werden zweifellos weniger Support-Tickets von Personen in den frühen Phasen der Plugin-Nutzung erhalten.
Was das Ersetzen eines Plugins durch ein anderes betrifft – versuchen Sie, sich aus solchen Situationen herauszuhalten. Manchmal ist es unvermeidlich, aber das Problem ist, dass Sie nie alle Benutzer dazu bringen werden, auf das neue Plugin umzusteigen, was bedeutet, dass Sie entweder zwei Plugins unterstützen oder einen Teil Ihrer Benutzerbasis, die weiterhin das alte Plugin verwendet, aufgeben und enttäuschen müssen. Wir stehen bei reset-wp vor der gleichen Entscheidung und mögen keine dieser beiden Lösungen