วิธีการเปิดใช้งานปลั๊กอินผ่านรหัส


22

หากเป็นไปได้จะเปิดใช้งานปลั๊กอินที่ติดตั้งอย่างไร (หมายถึงไฟล์ถูกวางไว้ในไดเรกทอรี wp-content / plugins) ถูกเปิดใช้งานจากปลั๊กอินอื่น ๆ ?

คำตอบ:


30

นี่คือวิธีที่ฉันทำในบางเว็บแอป:

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );

1
ดังที่ Rarst เขียนว่า "ปลอดภัย" ไม่มากนัก คุณควรตรวจสอบให้แน่ใจว่าปลั๊กอินที่คุณเปิดใช้งานด้วยวิธีนี้ปลอดภัย / จะไม่ทำให้ไซต์ของคุณเสียหาย
sorich87

10
ไม่ปลอดภัยเลยแม้กระนั้นก็ตามถ้าคุณเปิดใช้งานโปรแกรมโดยทางโปรแกรมคุณควรรู้ว่าคุณกำลังทำอะไรอยู่ ;-)
Denis de Bernardy

ปลอดภัยไว้ก่อน - ฉันหมายความว่านี่ไม่ใช่ส่วนหนึ่งของคำถามใช่มั้ย - ฉันชอบแนวทางของ sorich เพราะมันเรียกตัวกรองการเปิดใช้งานมาตรฐาน ดังนั้นปลั๊กอินจะได้รับการเปลี่ยนแปลงเพื่อเรียกใช้รูทีนการตั้งค่าหากมี
hakre

3
อย่างน้อยที่สุดเมื่อเร็ว ๆ นี้กำลังสร้างล้อ ฉันได้ใช้ตัวในactivate_plugin()และดูเหมือนว่าจะทำงานได้เหมือนกัน
Jake

1
@SagiveSEO มันปลอดภัยอย่างสมบูรณ์ - คล้ายกับวิธีที่ WP ทำยกเว้นการกำหนดให้ผู้ใช้ป้อนข้อมูล / อนุมัติและจัดทำ nonces และตรวจสอบสำหรับ nonces เหล่านั้น - เพียงแค่แนะนำการตรวจสอบที่จำเป็นสำหรับการเริ่มต้นฟังก์ชันนั้นทุกที่ - เพื่อให้ไม่สามารถเข้าถึงได้จากภายนอก เว็บ ฯลฯ ) และมันไม่สามารถเรียกแบบสุ่มในทางใด ๆ
unity100

13

กระบวนการเปิดใช้งานปลั๊กอินจะถูกเข้ารหัสเพื่อทำงานกับอินเตอร์เฟสผู้ดูแลระบบ WP มันทำการตรวจสอบบางอย่างเพื่อป้องกันการเปิดใช้งานปลั๊กอินที่มีข้อผิดพลาด (โหลดเช่นเมื่อเริ่มต้นอาจทำลาย WP)

มันถูกจัดการโดยactivate_plugin()ฟังก์ชั่น ( แหล่งที่มา ) ซึ่งบันทึกว่าไม่สามารถใช้งานได้ที่อื่น

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


7

ปลั๊กอินจะถูกเก็บไว้ในอาร์เรย์ในตัวเลือก 'active_plugins' อาร์เรย์มีเส้นทางไฟล์ไปยังแต่ละปลั๊กอินที่ใช้งานอยู่

activate_plugin($plugin_path)เพื่อเปิดใช้งานปลั๊กอินที่คุณจำเป็นต้องตรวจสอบสิ่งที่เส้นทางของมันจะเป็นแล้วผ่านเส้นทางไปที่

สิ่งนี้พูดได้ง่ายกว่าทำและ (อย่างน้อยใน 2.9) รหัสหลักไม่ได้ทำให้ง่ายขึ้น

ก่อนที่คุณจะสามารถ enable_plugin () คุณต้องรวมไฟล์ plugin.php จาก wp-admin / include / คุณควรตรวจสอบเพื่อให้แน่ใจว่าปลั๊กอินของคุณไม่ได้ใช้งานอยู่ ผลลัพธ์มีลักษณะดังนี้ (YMMV):

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

ฉันใช้สิ่งนี้กับการผลิตใน WP 2.9 และไม่ได้มีปัญหาสำคัญใด ๆ แต่ในการทดสอบของฉันมันมีผลลัพธ์ที่ไม่คาดคิดกับ WPMU ดังนั้นโปรดใช้สิ่งนี้ในการติดตั้งเครือข่าย


เวลาผ่านไปนาน แต่ถ้าคุณจำได้ผลลัพธ์ที่ไม่คาดคิดในสิ่งนี้คืออะไร?
Ünsal Korkmaz

ฉันจำไม่ได้เลย ฉันคิดว่ามันใช้งานไม่ได้และฉันทำสิ่งต่าง ๆ ด้วยมือเพราะฉันมีเว็บไซต์ MS ไม่มากเกินไป
jerclarke

ฉันจะดำเนินการนี้ได้อย่างไร ถ้าฉันเพียงแค่ดำเนินการได้โดยตรง get_option ไม่ได้ถูกกำหนด ...
เจนัส Troelsen

เพิ่มสิ่งนี้ใน functions.php และควรใช้งานได้แม้ว่าคุณควรใส่สิ่งต่าง ๆ ในฟังก์ชั่นและขอให้มันเป็น "init" หรือ "wp"
jerclarke

3

Wordpress มีฟังก์ชั่นสำหรับเปิดใช้งานปลั๊กอินตามWP Codex

function plugin_activation( $plugin ) {
    if( ! function_exists('activate_plugin') ) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if( ! is_plugin_active( $plugin ) ) {
        activate_plugin( $plugin );
    }
}

plugin_activation('akismet/akismet.php');

อีธานเกิดอะไรขึ้นกับคำตอบของฉัน
Mowshon

ในขณะที่โพสต์รหัสเพียงแค่ไม่เป็นไรสำหรับคำตอบอาจเป็นเรื่องยากที่จะตีความสำหรับโปรแกรมเมอร์ใหม่ที่อ่านคำตอบของคุณ ด้วยวิธีนี้ OP สามารถมีความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการทำงานของรหัสของคุณ
Ethan Jinks O'Sullivan

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.