WordPress Eklentilerini Programlı ve Otomatik Olarak İndirme, Yükleme, Etkinleştirme ve Değiştirme

Yayınlanan: 2018-09-18

Kullanıcıların her şeyi yapmasını sağlamak zordur. İster bir form dolduruyor olun, ister sadece birkaç tıklama gerçekleştiriyor olun – doğasında var olan bir direnç vardır. Bu işlem, zayıf bir şifreyi değiştirmek gibi kullanıcıların iyiliği için olsa bile, bunu yapmazlar. Aynısı, kullanıcıların gerekli bir eklentiyi yüklemesini sağlamak veya daha da kötüsü, etkin bir eklentiyi yenisiyle değiştirmek için de geçerlidir. Sınırda görev imkansız.

Neyse ki, biraz kod ve kullanıcının onayı ile WordPress eklentilerini indirebilir, kurabilir, etkinleştirebilir, devre dışı bırakabilir ve hatta silebiliriz. Bu otomatik süreç, sorumlu bir şekilde dağıtıldığında, kullanıcı deneyimini büyük ölçüde iyileştirebilir ve WordPress yöneticisinde gerekli kullanıcı eylemleri için dönüşüm oranlarını artırabilir.

Kullanıcıların her şeyi yapmasını sağlamak zordur. Öyleyse neden #WordPress eklentilerini otomatik olarak indirmiyor, kurmuyor ve etkinleştirmiyorsunuz? Sadece birkaç satır kod alır.

TWEET İÇİN TIKLAYIN

Eklentileri neden kod aracılığıyla indirin, kurun ve etkinleştirin?

Birden fazla senaryo var ama teori bir yana, hadi WP Reset'in elindeki duruma bakalım. Rebrand-wp'yi WP Reset olarak yeniden markalama hakkında zaten bir yazı yazdım. Diğer şeylerin yanı sıra, süreç, sitelerinden kaldırmak için zaten reset-wp kullanan kişilerin alınmasını ve ardından WP Reset'i kurmasını içerir. Biz sorduk diye biri bunu neden yapsın ki? Ve bunu yapmak isteseler bile, iki tıklamadan uzak olduğu için isteksiz olacaklar. Ancak, her şeyi açıklar ve tek bir düğmeye indirirsek “Evet, devam edin, reset-wp'yi Reset WP ile değiştirin”, o zaman işler o kadar da kötü görünmüyor.

İnsanların sitelerini izinleri olmadan karıştırmayın! Dönem. "Küçücük bir şey" olsa bile. Bu hiç hoş değil. Bu senin siten değil. Eklentiyi güncellediklerinde veya yeni özellikler eklediğinizde kullanıcıları herhangi bir değişiklik hakkında bilgilendirin.

Kullanıcıların hareketlerini takip etmemizi engelleyen wp.org kuralları nedeniyle (rızaları olmadan ve onları sormakla rahatsız etmek istemedik) ne yazık ki paylaşacak bir numaram yok. Ancak size söyleyebileceğim şey, değiştirme sürecinden geçen veya eklentideki bildirimi gören reset-wp kullanıcılarından hiçbir şikayetimiz olmadı. Ve süreci yedi haftadan fazla süredir yürütüyoruz.

Bunu yapmak uygun mu? Kullanıcılar ilgilenecek mi?

Kullanıcılar kesinlikle arkalarından yaptığınız her şeye ve her şeye dikkat edeceklerdir! Bunu yapma! Kullanıcıların izni olmadan hiçbir şey yapmayın. Özellikle eklenti kurallara aykırı olduğu için wp.org'da barındırılıyorsa. Bunu yaparsanız, yöneticiler eklentinizi depodan derhal kaldıracaktır.

Ancak izin isterseniz – “A eklentisini B eklentisiyle değiştirebilir miyiz? Lütfen onaylayın." O zaman bunu yapmak sorun değil. Bir eklentiyi devre dışı bırakma ve silme ve diğerini indirme ve etkinleştirme işlemi birkaç tıklamadan fazlasını alır. Bu nedenle, bu işlemi otomatikleştirmeyi başarırsanız ve tek tıklamaya indirirseniz, kullanıcılar memnun olacaktır.

Temalar için gerekli eklentileri etkinleştirmek için benzer bir süreç yıllardır uygulanıyor ve kullanıcılar bundan memnun. Eklentileri yüklemek için birden fazla bağlantıyı takip etmek yerine, işlemin tamam olduğunu onaylarlar ve tek bir tıklamayla birkaç eklenti yüklenir.

Her zamanki gibi, çok az kod gerekiyor

Sözde kodda, yapmak istediğimiz şeyin genel fikri şudur:

// 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

Oldukça basit ve anlaşılır. Kullanıcı doğru dosya izinlerine sahip olduğu sürece her şey yolunda gidecektir. Tüm değiştirmenin tamamlanması bir veya iki saniyeden fazla sürmez.

Birkaç fonksiyona ihtiyacımız var

Neyse ki WordPress, yapılması veya yarı yapılması gereken işlevlerin çoğuna sahiptir, bu yüzden işleri bir araya getirme meselesidir.

Anlaşılması gereken çok önemli bir kavram, WordPress'in bir eklentiyi nasıl tanımladığı, hangi eklentinin hangisi olduğunu nasıl bildiğidir. Bunu, eklenti klasörü adı ve ana PHP dosyasının bir kombinasyonu olan eklenti slug ile yapar. Örneğin: merhaba-dolly/merhaba-dolly.php. Ana PHP dosyası, eklenti başlıklarına sahip dosyadır. Bilgiyi almak için plugin_basename( __FILE__ ) çalıştırın. Bir eklentinin etkin olup olmadığını veya onunla bir şeyler yapmak istediğinizi kontrol etmeniz gerektiğinde, eklenti slug'unu kullanmanız gerekir. Bu sümüklü böcek benzer ancak wp.org'daki sümüklü böcek ile aynı değil. Depodaki bilgi, dosya adı olmadan yalnızca klasör adıdır. Yani Hello Dolly için "merhaba bebek". Şu anda buna ihtiyacımız yok, ancak açıklığa kavuşturulması gerekiyor. Bu biraz kafa karıştırıcı konu hakkında daha ayrıntılı bir okuma için Stack Exchange'deki bu konuya göz atın.

WordPress, eklentileri sümüklü böcekleriyle tanımlar, yani merhaba-dolly/hello-dolly.php. Bilgiyi almak için eklentinin ana dosyasında plugin_basename( __FILE__ ) çalıştırın.

is_plugin_active( $plugin_slug ) yerleşik olarak gelir, yani bizim yapacak bir şeyimiz yok. Codex sayfası fazla bir şey göstermez, basit bir fonksiyondur.

is_plugin_installed( $plugin_slug ) yerleşik olarak gelmez, ancak kodlanması yalnızca birkaç satırdır.

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;
  }
}

İhtiyacımız olan tüm koşullu, test işlevleri bunlar. Şimdi bir şeyler yapanlar için. activate_plugin( ) yerleşiktir ve dört parametreye sahiptir, bu nedenle Codex sayfasına bu konuda göz atın.

deactivate_plugins( $plugin_slug ) kullanıma hazır olarak da mevcuttur, ancak işlevlerin adındaki "s" (çoğul) işaretine dikkat ettiğinizden emin olun. Onun da birkaç parametresi var, bu yüzden Codex sayfasını okuyun.

install_plugin( $plugin_zip ) , Plugin_Upgrader sınıfının bir parçası olarak mevcuttur. Ekstra koda gerek yok, sadece yeni bir sınıf örneği. Aynısı upgrade_plugin( $plugin_slug ) için de geçerlidir.

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() gerekli olmayabilir ama sadece güvenli tarafta olması için ekledim. Çalıştırması 10ms daha uzun süren şeylerin yanı sıra, herhangi bir zarar veremez.

Hepsini bir araya koy

Bu makaleyi meraktan değil de, kodu bir eklentide uygulama ihtiyacından dolayı okuyorsanız, reset-wp eklentisini yüklemenizi şiddetle tavsiye ederim. Kod hakkında okumak güzeldir, ancak hiçbir şey vahşi doğada test etmekle karşılaştırılamaz.

Tercihim, tam bir yönetici GUI'sine ihtiyaç duymayan hemen hemen her şey için admin_action kullanmaktır. Bu nedenle, bunu diğer eylemlerin ve filtrelerin eklendiği işleve ekleyin: add_action( 'admin_action_replace_plugin', 'replace_plugin' ); . Kullanıcı admin.php?action=replace_plugin'i açtığında kodumuz çalışacaktır. Lütfen bu URL'yi sabit kodlamayın. Şuna benzer bir şey kullanın: $url = add_query_arg(array('action' => 'replace_plugin'), admin_url('admin.php')); . Kod kaliteniz hakkında çok şey konuşuyor.

İşte kopyalayabileceğiniz/yapıştırabileceğiniz kod. Açıkçası, üstteki üç değişkeni değerlerinizle değiştirin.

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;
}

Kod, daha önce tartıştığımız her şeyi kullanır. GUI ve mesajlar çok basittir, bu nedenle biraz CSS ekleyin veya URL'yi reset-wp'de yaptığımız gibi bir lightbox'a yükleyin.

Kullanıcılar için sıkıcı sıradan görevleri otomatik olarak gerçekleştirmek #UX için her zaman büyük bir artıdır. Tek bir tıklamayla birden çok #WordPress eklentisini nasıl kolayca indirebileceğinizi, kurabileceğinizi ve etkinleştirebileceğinizi görün.

TWEET İÇİN TIKLAYIN

Bir tıklama her zaman ondan daha iyidir

Kullanıcıların on kez tıklamak yerine bir kez tıklaması her zaman olumlu bir şeydir! Bu, iyi bir UX (kullanıcı deneyimi) işaretidir. Bu nedenle, eklentiniz veya temanız başka eklentiler gerektiriyorsa, tüm bağımlılıklar için tek tıklamalı bir kurulum prosedürü uygulamanızı tavsiye ederim. Eklenti kullanımının ilk aşamalarında hiç şüphesiz insanlardan daha az destek bileti alacaksınız.

Bir eklentiyi diğeriyle değiştirmeye gelince – bu durumlardan uzak durmaya çalışın. Bazen bu kaçınılmazdır, ancak sorun şu ki, tüm kullanıcıların yeni eklentiye geçmesini asla sağlayamayacaksınız, bu da ya iki eklentiyi desteklemeniz ya da eski eklentiyi kullanmaya devam eden kullanıcı tabanınızın bir bölümünü terk etmeniz ve hayal kırıklığına uğratmanız gerektiği anlamına gelir. Aynı kararla reset-wp ile karşı karşıyayız ve bu iki çözümden hiçbirini beğenmiyoruz