ทำไม enable_plugin ไม่ทำงานใน register_activation_hook


10

ฉันพยายามเปิดใช้งานปลั๊กอินที่สองโดยอัตโนมัติในขณะที่เปิดใช้งานปลั๊กอินแรก

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

มันไม่ทำงานภายใน register_activation_hook .. มันใช้งานได้ถ้าฉันใช้มันโดยตรงเช่น:

include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');

ฉันจะแก้ไขได้อย่างไร ขอบคุณที่ช่วยเหลือ

สารละลาย:

ฉันกำลังใช้สิ่งนี้ด้วยตัวเองตอนนี้:

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 

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

รอสักครู่. จำเป็นต้องแก้ไขโพสต์ของฉัน
Chris

ใช่เป็นปลั๊กอินตัวแรกที่พยายามเปิดใช้งานปลั๊กอินตัวที่สอง .. ปลั๊กอินตัวที่สองคือ hello.php ตัวอย่าง
Ünsal Korkmaz

คำตอบ:


8

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

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

การเรียกกลับการติดตั้งนี้เรียกใช้รหัสของคุณ

หลังจากนั้น WordPress จะอัปเดตฐานข้อมูลด้วยอาร์เรย์ด้านบนซึ่งมีปลั๊กอินตัวแรก แต่ไม่ใช่ปลั๊กอินตัวที่สอง ดังนั้นปลั๊กอินที่สองของคุณจะไม่ปรากฏขึ้น

การแก้ไข:ได้กล่าวถึงในลิงค์ด้านบนการแก้ปัญหาเป็นเช่นนี้ (ยังไม่ทดลอง):

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}

หากคุณมีเวลาฉันจะแก้ไขคำถามเพื่อเขียนสิ่งที่ฉันใช้อยู่ตอนนี้ คุณสามารถดู enable_plugin (ขึ้นอยู่กับ $); ไม่ทำงานเมื่อเปิดใช้งานปลั๊กอิน ความคิดใด ๆ ที่จะแก้ไขได้อย่างไร
Ünsal Korkmaz

คัดลอกรหัสของคุณไปยังปลั๊กอินทดสอบ (และสร้างhello.phpปลั๊กอินทดสอบทดสอบอีกอัน- มันใช้งานได้ดีสำหรับฉัน) จำไว้ว่าถ้าปลั๊กอินที่มีอยู่ในไดเรกทอรีย่อยคุณจะต้องให้โฟลเดอร์: hello/hello.phpเช่น
Stephen Harris

รหัสของฉันจะใช้งานได้ปกติ .. ปัญหาเริ่มต้นเมื่อคุณเปลี่ยนactivate_plugin('hello.php');สายด้วยactivate_plugin($dependent);
Ünsal Korkmaz

นั่นเป็นเพราะตัวแปรที่กำหนดให้กับการติดต่อกลับของคุณไม่ได้เป็นhello.phpเพียงอาร์เรย์ของปลั๊กอินที่ใช้งานอยู่ในปัจจุบัน คุณไม่สามารถส่งผ่านตัวแปรของคุณไปยังการโทรกลับได้ เว้นแต่คุณจะใช้ตัวแปรชั้น / activate_plugin('hello.php');ระดับโลกที่คุณจะต้องใช้ แต่นั่นไม่ควรเป็นปัญหา ... ?
Stephen Harris

ดีฉันไม่ชอบที่จะเขียนตัวแปรเดียวกันในสถานที่มากมาย tbh แต่มันไม่ใช่เรื่องใหญ่ ขอบคุณมาก
Knsal Korkmaz

2

นี่คือบางคนอธิบายว่าทำไมมันไม่ทำงานสำหรับเขาและวิธีที่เขาจะต้องคัดลอกวิธีเปิดใช้งานและสร้างหนึ่งของเขาเองโดยไม่มีปัญหา: /programming/1415958/how-to- เปิดใช้งาน-WordPress-ปลั๊กอินภายใน

นี่คือแหล่งที่มาดั้งเดิมของรหัส enable_plugin ซึ่งคุณสามารถใช้เพื่อสร้างฟังก์ชั่นของคุณเองและดูว่ามันทำงานที่ไหน: http://hitchhackerguide.com/2011/02/11/activate_plugin/

นี่เป็นวิธีแก้ปัญหาที่เป็นไปได้ซึ่งมีวิธีการเปิดใช้งานปลั๊กอินทางเลือกซึ่งอาจมีคนอื่นมาจากรหัสแหล่งที่มา: วิธีการเปิดใช้งานปลั๊กอินผ่านรหัส?


วิธีการแก้ปัญหานั้นยังคงไม่ทำงานใน register_activation_hook
Ünsal Korkmaz

โชคดีที่ตอนนี้คุณมีวิธีการเปิดใช้งานปลั๊กอินของคุณเองแล้วคุณควรจะสามารถแก้ไขข้อบกพร่องและเข้าใจว่ามันทำงานผิดพลาดใช่ไหม? :) คุณเปลี่ยน register_activation_hook เพื่อใช้วิธี enable_plugin ที่คุณกำหนดเองแทนที่จะเป็นค่าเริ่มต้นหรือไม่? ถ้าเป็นเช่นนั้นให้โยนข้อความ Trig_error สองสามข้อความแล้วหาว่ามันล้มเหลวที่ไหน ตัวอย่างเช่นที่ดีสำหรับการเริ่มต้นคือการค้นหาว่าวิธีการของคุณจะกลับมาเมื่อมันล้มเหลว
mltsy

ฉันพยายามทำให้ดีที่สุดสำหรับการดีบั๊ก แต่ฉันหาเหตุผลไม่ได้ บางทีตัวเลือก active_plugins ที่จะได้รับการอัปเดตหลังจาก register_activation_hook ดำเนินการแล้ว
Ünsal Korkmaz

ฉันขอโทษฉันเพิ่งแก้ไขลำดับของลิงก์ทั้งสองที่ฉันสลับ (สองอันสุดท้าย) คุณใช้รหัสจากลิงก์ชื่อ "วิธีเปิดใช้งานปลั๊กอินผ่านรหัสหรือไม่" คำแนะนำที่เป็นประโยชน์อีกข้อที่จะให้คือค่าตอบแทนของactivate_pluginวิธีการเริ่มต้น คุณสามารถใช้trigger_errorเพื่อค้นหาค่าส่งคืนและโพสต์ไว้ที่นี่
mltsy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.