วิธีดาวน์โหลด, ติดตั้ง, เปิดใช้งาน & แทนที่ปลั๊กอิน WordPress โดยทางโปรแกรม & โดยอัตโนมัติ

เผยแพร่แล้ว: 2018-09-18

การให้ผู้ใช้ทำอะไรก็เป็นเรื่องยาก ไม่ว่าจะเป็นการกรอกแบบฟอร์มหรือดำเนินการเพียงไม่กี่คลิก – มีการต่อต้านโดยธรรมชาติ แม้ว่าการกระทำนั้นจะทำเพื่อประโยชน์ของผู้ใช้ เช่น การเปลี่ยนรหัสผ่านที่ไม่รัดกุม พวกเขาจะไม่ทำ เช่นเดียวกับการให้ผู้ใช้ติดตั้งปลั๊กอินที่จำเป็น หรือที่แย่กว่านั้นคือการแทนที่ปลั๊กอินที่ใช้งานอยู่ด้วยปลั๊กอินใหม่ ภารกิจแนวเขตเป็นไปไม่ได้

โชคดีที่ด้วยโค้ดเล็กน้อยและความยินยอมของผู้ใช้ เราสามารถดาวน์โหลด ติดตั้ง เปิดใช้งาน ปิดใช้งาน และแม้กระทั่งลบปลั๊กอิน WordPress กระบวนการอัตโนมัตินี้ เมื่อปรับใช้อย่างมีความรับผิดชอบ สามารถปรับปรุงประสบการณ์ของผู้ใช้ได้อย่างมาก และเพิ่มอัตราการแปลงสำหรับการดำเนินการที่จำเป็นของผู้ใช้ในผู้ดูแลระบบ WordPress

การให้ผู้ใช้ทำอะไรก็เป็นเรื่องยาก เหตุใดจึงไม่ดาวน์โหลด ติดตั้ง & เปิดใช้งานปลั๊กอิน #WordPress โดยอัตโนมัติ ใช้โค้ดเพียงไม่กี่บรรทัด

คลิกเพื่อทวีต

ทำไมต้องดาวน์โหลด ติดตั้ง และเปิดใช้งานปลั๊กอินผ่านโค้ด?

มีหลายสถานการณ์ แต่นอกเหนือจากทฤษฎีแล้ว มาดูสถานการณ์ WP Reset ที่อยู่ในมือกัน ฉันได้เขียนโพสต์เกี่ยวกับการรีแบรนด์ reset-wp เป็น WP Reset แล้ว นอกเหนือจากสิ่งอื่น ๆ กระบวนการยังเกี่ยวข้องกับการให้ผู้ที่ใช้ reset-wp อยู่แล้วเพื่อลบออกจากเว็บไซต์ของตนแล้วติดตั้ง WP Reset ทำไมบางคนถึงทำอย่างนั้นเพียงเพราะเราถาม? และแม้ว่าพวกเขาต้องการจะทำ พวกเขาจะลังเลเพราะอยู่ไกลจากการคลิกสองครั้ง อย่างไรก็ตาม หากเราอธิบายทุกอย่างและสรุปเป็นปุ่มเดียว “ใช่ ไปข้างหน้า แทนที่ reset-wp ด้วย Reset WP” สิ่งต่างๆ ก็ไม่ได้ดูแย่ขนาดนั้น

อย่ายุ่งกับไซต์ของผู้อื่นโดยไม่ได้รับอนุญาต! ระยะเวลา. แม้จะเป็นเพียง “สิ่งเล็กน้อย” ที่ไม่เย็น ไม่ใช่ไซต์ของคุณ แจ้งให้ผู้ใช้ทราบถึงการเปลี่ยนแปลงใด ๆ เมื่อพวกเขาอัปเดตปลั๊กอินหรือเมื่อคุณเพิ่มคุณสมบัติใหม่

เนื่องจากกฎ wp.org ที่ป้องกันไม่ให้เราติดตามการกระทำของผู้ใช้ (โดยไม่ได้รับความยินยอมจากพวกเขา และเราไม่ต้องการรบกวนพวกเขาด้วยการถาม) ฉันไม่มีตัวเลขที่จะแบ่งปัน แต่สิ่งที่ฉันสามารถบอกคุณได้ก็คือ เราไม่มีข้อตำหนิจากผู้ใช้ reset-wp ที่ผ่านกระบวนการเปลี่ยน หรือเพิ่งเห็นการแจ้งเตือนในปลั๊กอิน และเราได้ดำเนินการตามกระบวนการนี้มานานกว่าเจ็ดสัปดาห์แล้ว

ทำแบบนี้โอเคมั้ย? ผู้ใช้จะรังเกียจไหม

ผู้ใช้จะต้องใส่ใจในสิ่งที่คุณทำอยู่เบื้องหลังอย่างแน่นอน! อย่าทำอย่างนั้น! อย่าทำอะไรโดยไม่ได้รับอนุญาตจากผู้ใช้ โดยเฉพาะอย่างยิ่งถ้าปลั๊กอินโฮสต์อยู่บน wp.org เพราะนั่นขัดต่อกฎ หากคุณทำเช่นนั้น ผู้ดูแลระบบจะลบปลั๊กอินของคุณออกจากที่เก็บโดยทันที

แต่ถ้าคุณขออนุญาต – “เราสามารถแทนที่ปลั๊กอิน A ด้วยปลั๊กอิน B ได้หรือไม่? กรุณายืนยัน." ถ้าอย่างนั้นก็ไม่เป็นไร กระบวนการปิดใช้งานและลบปลั๊กอินหนึ่งตัว และการดาวน์โหลดและเปิดใช้งานปลั๊กอินอื่นใช้เวลามากกว่าสองถึงสามคลิก ดังนั้น หากคุณจัดการเพื่อทำให้กระบวนการนั้นเป็นอัตโนมัติ และลดขั้นตอนให้เหลือเพียงคลิกเดียว ผู้ใช้จะพึงพอใจ

กระบวนการที่คล้ายคลึงกันในการเปิดใช้งานปลั๊กอินที่จำเป็นสำหรับธีมนั้นมีมานานแล้ว และผู้ใช้ก็พอใจกับมัน แทนที่จะติดตามหลายลิงก์เพื่อติดตั้งปลั๊กอิน พวกเขายืนยันว่าพวกเขาตกลงกับกระบวนการและมีการติดตั้งปลั๊กอินหลายตัวในคลิกเดียว

ตามปกติแล้ว ต้องใช้โค้ดเพียงเล็กน้อย

ในโค้ดหลอก นี่คือแนวคิดทั่วไปของสิ่งที่เราต้องการทำ:

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

มันค่อนข้างง่ายและตรงไปตรงมา ตราบใดที่ผู้ใช้มีสิทธิ์ไฟล์ที่ถูกต้อง ตั้งค่าทุกอย่างจะราบรื่น การเปลี่ยนทั้งหมดใช้เวลาไม่เกินหนึ่งหรือสองวินาทีจึงจะเสร็จสมบูรณ์

เราต้องการฟังก์ชั่นบางอย่าง

โชคดีที่ WordPress มีฟังก์ชันส่วนใหญ่ที่เราต้องการไม่ว่าจะทำเสร็จแล้วหรือกึ่งสำเร็จรูป ดังนั้นจึงเป็นเรื่องของการรวมสิ่งต่าง ๆ เข้าด้วยกัน

แนวคิดสำคัญที่ต้องทำความเข้าใจคือ WordPress ระบุปลั๊กอินได้อย่างไร รู้ได้อย่างไรว่าปลั๊กอินตัวใด มันทำได้โดยปลั๊กอินกระสุน - การรวมกันของชื่อโฟลเดอร์ปลั๊กอินและไฟล์ PHP หลัก ตัวอย่างเช่น: hello-dolly/hello-dolly.php ไฟล์ PHP หลักคือไฟล์ที่มีส่วนหัวของปลั๊กอิน ในการรับกระสุนรัน plugin_basename( __FILE__ ) เมื่อใดก็ตามที่คุณต้องตรวจสอบว่าปลั๊กอินทำงานอยู่หรือต้องการทำอะไรกับมัน คุณจำเป็นต้องใช้ตัวทากของปลั๊กอิน ทากนี้คล้ายกันแต่ไม่เหมือนกับทากจาก wp.org บนที่เก็บ กระสุนเป็นเพียงชื่อโฟลเดอร์ โดยไม่มีชื่อไฟล์ ดังนั้นสำหรับ Hello Dolly ก็คือ “สวัสดีดอลลี่” เราไม่ต้องการสิ่งนั้นในขณะนี้ แต่จำเป็นต้องได้รับการชี้แจง สำหรับการอ่านเชิงลึกในหัวข้อที่ค่อนข้างสับสน ลองดูกระทู้นี้ใน Stack Exchange

WordPress ระบุปลั๊กอินด้วยกระสุนของพวกเขา เช่น hello-dolly/hello-dolly.php ในการรับกระสุนรัน plugin_basename( __FILE__ ) ในไฟล์หลักของปลั๊กอิน

is_plugin_active( $plugin_slug ) มีมาให้ในตัว ดังนั้นเราไม่ต้องทำอะไรเลย หน้า Codex ไม่ได้เปิดเผยอะไรมาก มันเป็นฟังก์ชั่นที่เรียบง่าย

is_plugin_installed( $plugin_slug ) ไม่มีมาให้ในตัว แต่มีเพียงไม่กี่บรรทัดในการเขียนโค้ด

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

ทั้งหมดนี้เป็นฟังก์ชันการทดสอบแบบมีเงื่อนไขที่เราต้องการ ตอนนี้สำหรับคนที่ทำอะไรบางอย่าง activate_plugin( ) มีอยู่แล้วภายในและมีพารามิเตอร์สี่ตัว โปรดตรวจสอบหน้า Codex เกี่ยวกับมัน

deactivate_plugins( $plugin_slug ) ยังมีให้ใช้งานได้ทันที แต่ต้องสังเกตเครื่องหมาย “s” (พหูพจน์) ในชื่อฟังก์ชันด้วย มีพารามิเตอร์บางอย่างเช่นกัน ดังนั้นโปรดอ่านหน้า Codex

install_plugin( $plugin_zip ) มีให้โดยเป็นส่วนหนึ่งของคลาส Plugin_Upgrader ไม่ต้องใช้โค้ดพิเศษใดๆ แค่คลาสใหม่เท่านั้น เช่นเดียวกันสำหรับ 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() แต่ฉันเพิ่มมันเข้าไปเพื่อความปลอดภัย นอกจากสิ่งที่ต้องใช้เวลานานกว่า 10 มิลลิวินาทีในการรัน มันไม่สามารถทำอันตรายใดๆ ได้

วางมันทั้งหมดเข้าด้วยกัน

หากคุณกำลังอ่านบทความนี้ไม่ใช่เพราะความอยากรู้ แต่เนื่องจากความจำเป็นจริงๆ ในการนำโค้ดไปใช้ในปลั๊กอิน ฉันขอแนะนำให้ติดตั้งปลั๊กอิน reset-wp เป็นอย่างยิ่ง การอ่านเกี่ยวกับโค้ดเป็นเรื่องที่ดี แต่ไม่มีอะไรเทียบได้กับการทดสอบในธรรมชาติ

ความชอบของฉันคือการใช้ admin_action สำหรับเกือบทุกอย่างที่ไม่ต้องการ GUI ของผู้ดูแลระบบแบบเต็ม ดังนั้น เพิ่มสิ่งนี้ในฟังก์ชันที่มีการเพิ่มการกระทำและตัวกรองอื่นๆ: add_action( 'admin_action_replace_plugin', 'replace_plugin' ); . เมื่อผู้ใช้เปิด admin.php?action=replace_plugin รหัสของเราจะทำงาน โปรดอย่าฮาร์ดโค้ด URL นั้น ใช้บางอย่างเช่น: $url = add_query_arg(array('action' => 'replace_plugin'), admin_url('admin.php')); . มันพูดถึงคุณภาพโค้ดของคุณอย่างมากมาย

นี่คือรหัสที่คุณสามารถคัดลอก/วาง แน่นอน แก้ไขสามตัวแปรด้านบนด้วยค่าของคุณ

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

รหัสนี้ใช้ทุกอย่างที่เราพูดถึงไปแล้ว GUI และข้อความเป็นพื้นฐานมาก ดังนั้นให้เพิ่ม CSS เล็กน้อยหรือโหลด URL ในไลท์บ็อกซ์เหมือนที่เราทำใน reset-wp

การทำงานธรรมดาที่น่าเบื่อให้กับผู้ใช้โดยอัตโนมัตินั้นเป็นประโยชน์อย่างมากสำหรับ #UX ดูวิธีที่คุณสามารถดาวน์โหลด ติดตั้ง และเปิดใช้งานปลั๊กอิน #WordPress หลายตัวได้อย่างง่ายดายด้วยการคลิกเพียงครั้งเดียว

คลิกเพื่อทวีต

คลิกเดียวดีกว่าสิบเสมอ

การให้ผู้ใช้คลิกหนึ่งครั้งแทนที่จะเป็นสิบครั้งนั้นเป็นสิ่งที่ดีเสมอ! เป็นสัญญาณของ UX ที่ดี (ประสบการณ์ผู้ใช้) ดังนั้น หากปลั๊กอินหรือธีมของคุณต้องใช้ปลั๊กอินอื่น ฉันขอแนะนำให้ใช้ขั้นตอนการติดตั้งแบบคลิกเดียวสำหรับการขึ้นต่อกันทั้งหมด คุณจะได้รับตั๋วสนับสนุนน้อยลงจากผู้ที่อยู่ในช่วงเริ่มต้นของการใช้ปลั๊กอินอย่างไม่ต้องสงสัย

สำหรับการแทนที่ปลั๊กอินตัวหนึ่งด้วยอีกตัวหนึ่ง – พยายามหลีกเลี่ยงสถานการณ์เหล่านั้น บางครั้งก็หลีกเลี่ยงไม่ได้ แต่ปัญหาคือ คุณจะไม่มีวันให้ผู้ใช้ทั้งหมดเปลี่ยนไปใช้ปลั๊กอินใหม่ ซึ่งหมายความว่าคุณต้องสนับสนุนปลั๊กอินสองตัวหรือละทิ้งและทำให้ส่วนหนึ่งของฐานผู้ใช้ของคุณผิดหวังที่ยังคงใช้ปลั๊กอินเก่าต่อไป เราเผชิญกับการตัดสินใจแบบเดียวกันด้วย reset-wp และไม่ชอบวิธีใดวิธีหนึ่งจากสองวิธีนั้น