Cum să descărcați, să instalați, să activați și să înlocuiți pluginurile WordPress în mod programatic și automat
Publicat: 2018-09-18A face utilizatorii să facă orice este greu. Fie că este vorba de completarea unui formular sau doar de a efectua câteva clicuri – există o rezistență inerentă. Chiar dacă această acțiune este spre binele utilizatorilor, cum ar fi schimbarea unei parole slabe, ei nu o vor face. Același lucru este valabil și pentru a determina utilizatorii să instaleze un plugin necesar, sau chiar mai rău, pentru a înlocui un plugin activ cu unul nou. Este o misiune limită imposibilă.
Din fericire, cu puțin cod și acordul utilizatorului, putem descărca, instala, activa, dezactiva și chiar șterge plugin-uri WordPress. Acest proces automatizat, atunci când este implementat în mod responsabil, poate îmbunătăți drastic experiența utilizatorului și poate crește ratele de conversie pentru acțiunile necesare ale utilizatorului în administratorul WordPress.
A face utilizatorii să facă orice este greu. Deci, de ce nu descărcați, instalați și activați automat pluginurile #WordPress? Este nevoie de doar câteva linii de cod.
CLICK PENTRU A TWETEDe ce să descărcați, să instalați și să activați pluginuri prin cod?
Există mai multe scenarii, dar teorie deoparte, să ne uităm la situația pe care WP Reset o are la îndemână. Am scris deja o postare despre rebrandingul reset-wp în WP Reset. Pe lângă alte lucruri, procesul implică ca oamenii care folosesc deja reset-wp să îl elimine de pe site-urile lor și apoi să instaleze WP Reset. De ce ar face cineva asta doar pentru că am întrebat? Și chiar dacă vor s-o facă, vor fi reticente pentru că este departe de două clicuri. Cu toate acestea, dacă explicăm totul și îl reducem la un singur buton „Da, continuă, înlocuiește reset-wp cu Reset WP”, atunci lucrurile nu arată atât de rău.
Nu te încurca cu site-urile oamenilor fără permisiunea lor! Perioadă. Nici măcar dacă este „un lucru mic”. Asta nu e tare. Nu este site-ul tău. Notificați utilizatorii cu privire la orice modificări atunci când actualizează pluginul sau când adăugați funcții noi.
Datorită regulilor wp.org care ne împiedică să urmărim acțiunile utilizatorilor (fără consimțământul lor și nu am vrut să-i deranjez să întrebăm) eu, din păcate, nu am niciun număr de distribuit. Dar ceea ce vă pot spune este că nu am avut plângeri de la utilizatorii reset-wp care au trecut prin procesul de înlocuire sau doar au văzut notificarea în plugin. Și rulăm procesul de peste șapte săptămâni.
Este în regulă să faci asta? Le va supăra utilizatorii?
Cu siguranță utilizatorilor le va deranja orice și tot ceea ce faci în spatele lor! Nu face asta! Nu faceți nimic fără permisiunea utilizatorilor. Mai ales dacă pluginul este găzduit pe wp.org pentru că asta contravine regulilor. Dacă faceți asta, administratorii vă vor elimina imediat pluginul din depozit.
Dar, dacă ceri permisiunea – „Putem înlocui pluginul A cu pluginul B? Vă rugăm să confirmați." Atunci este în regulă să faci asta. Procesul de dezactivare și ștergere a unui plugin și de descărcare și activare a altuia durează mai mult de câteva clicuri. Deci, dacă reușiți să automatizați acest proces și să îl reduceți la un singur clic, utilizatorii vor fi mulțumiți.
Un proces similar de activare a pluginurilor necesare pentru teme este în joc de ani de zile, iar utilizatorii sunt de acord cu el. În loc să urmeze mai multe link-uri pentru a instala plugin-uri, ei confirmă că sunt de acord cu procesul și mai multe plugin-uri sunt instalate cu un singur clic.
Ca de obicei, este nevoie de foarte puțin cod
În pseudocod, aceasta este ideea generală a ceea ce vrem să facem:
// 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
Este destul de simplu și direct. Atâta timp cât utilizatorul are permisiunile corecte pentru fișiere, totul va decurge fără probleme. Întreaga înlocuire nu durează mai mult de o secundă sau două.
Avem nevoie de câteva funcții
Din fericire, WordPress are cele mai multe dintre funcțiile de care avem nevoie fie făcute, fie semi-terminate, așa că este o chestiune de a pune lucrurile cap la cap.
Un concept crucial de înțeles este modul în care WordPress identifică un plugin, cum știe care plugin este care. Face asta prin plugin slug – o combinație de numele folderului plugin și fișierul PHP principal. De exemplu: hello-dolly/hello-dolly.php. Fișierul PHP principal este fișierul cu antetele pluginului. Pentru a obține slug-ul, rulați plugin_basename( __FILE__ )
. Ori de câte ori trebuie să verificați dacă un plugin este activ sau doriți să faceți ceva cu el, trebuie să utilizați pluginul slug. Acest slug este similar, dar nu la fel cu slug-ul de pe wp.org. În depozit, slug-ul este doar numele folderului, fără numele fișierului. Deci, pentru Hello Dolly este „hello-dolly”. Nu avem nevoie de asta momentan, dar trebuie clarificat. Pentru o citire mai aprofundată despre acest subiect oarecum confuz, consultați acest thread pe Stack Exchange.
WordPress identifică pluginurile după slug-ul lor, adică hello-dolly/hello-dolly.php. Pentru a obține slug-ul, rulați plugin_basename( __FILE__ )
în fișierul principal al pluginului.
is_plugin_active( $plugin_slug )
este încorporat, așa că nu avem nimic de făcut. Pagina Codex nu dezvăluie prea multe în plus, este o funcție simplă.
is_plugin_installed( $plugin_slug )
nu este încorporat, dar sunt doar câteva linii de codat.
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; } }
Acestea sunt toate funcțiile de testare condiționate de care avem nevoie. Acum pentru cei care fac ceva. activate_plugin( )
este încorporat și are patru parametri, așa că consultați pagina Codex despre asta.
deactivate_plugins( $plugin_slug )
este, de asemenea, disponibil imediat, dar asigurați-vă că notați „s” (pluralul) din numele funcțiilor. Are și câțiva parametri, așa că citiți pagina Codex.
install_plugin( $plugin_zip )
este disponibil ca parte a clasei Plugin_Upgrader
. Nu este nevoie de niciun cod suplimentar, doar o nouă instanță de clasă. Același lucru este valabil și pentru 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()
poate să nu fie necesar, dar l-am adăugat doar pentru a fi sigur. Pe lângă faptul că funcționează cu 10 ms, nu poate face niciun rău.
Punând totul împreună
Dacă citiți acest articol nu din curiozitate, ci dintr-o nevoie reală de a implementa codul într-un plugin, vă sugerez să instalați pluginul reset-wp. Citirea despre cod este plăcută, dar nimic nu se compară cu testarea în sălbăticie.
Preferința mea este să folosesc admin_action pentru aproape tot ceea ce nu are nevoie de o interfață de administrare completă. Deci, adăugați acest lucru la funcția în care sunt adăugate alte acțiuni și filtre: add_action( 'admin_action_replace_plugin', 'replace_plugin' );
. Când utilizatorul deschide admin.php?action=replace_plugin codul nostru va rula. Vă rugăm să nu codificați acea adresă URL. Folosiți ceva de genul: $url = add_query_arg(array('action' => 'replace_plugin'), admin_url('admin.php'));
. Vorbește multe despre calitatea codului tău.
Iată codul pe care îl puteți copia/lipi. Evident, modificați cele trei variabile de deasupra cu valorile dvs.
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; }
Codul folosește tot ce am discutat deja. GUI și mesajele sunt foarte simple, așa că adăugați un pic de CSS sau încărcați URL-ul într-o casetă de lumină, așa cum am făcut în reset-wp.
Efectuarea automată a sarcinilor banale plictisitoare pentru utilizatori este întotdeauna un mare plus pentru #UX. Vedeți cum puteți descărca, instala și activa cu ușurință mai multe pluginuri #WordPress cu un singur clic.
CLICK PENTRU A TWETEUn clic este întotdeauna mai bun decât zece
Faptul ca utilizatorii să facă clic o dată în loc de zece ori este întotdeauna un lucru pozitiv! Este un semn de UX (experienta utilizator) buna. Deci, dacă pluginul sau tema dvs. necesită alte plugin-uri, aș recomanda implementarea unei proceduri de instalare cu un singur clic pentru toate dependențele. Fără îndoială, veți primi mai puține bilete de asistență de la oameni din primele etape de utilizare a pluginului.
În ceea ce privește înlocuirea unui plugin cu altul - încercați să rămâneți departe de aceste situații. Uneori este inevitabil, dar problema este că nu veți determina niciodată toți utilizatorii să treacă la noul plugin, ceea ce înseamnă că fie trebuie să acceptați două pluginuri, fie să abandonați și să dezamăgiți o parte a bazei dvs. de utilizatori care continuă să folosească vechiul plugin. Ne confruntăm cu aceeași decizie cu reset-wp și nu ne place nici una dintre aceste două soluții