สิ่งแรกที่ WordPress ทำเพื่อโหลดปลั๊กอินคือรับปลั๊กอินที่ใช้งานตามที่บันทึกไว้ในฐานข้อมูล:
$active_plugins = (array) get_option( 'active_plugins', array() );
เนื่องจากมันใช้get_option()
เราสามารถใช้option_active_plugins
ตัวกรองเพื่อแก้ไขรายการของปลั๊กอินที่ใช้งานได้ทันที
function wpse_301282_disable_plugin( $active_plugins ) {
if ( defined( 'WP_CLI' ) && WP_CLI ) {
$key = array_search( 'gravityforms/gravityforms.php', $active_plugins );
if ( $key ) {
unset( $active_plugins[$key] );
}
}
return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );
เพียงแทนที่gravityforms/gravityforms.php
ด้วยไดเรกทอรีและชื่อไฟล์ของปลั๊กอินที่คุณต้องการปิดการใช้งาน
ปัญหาที่นี่คือเรากำลังพยายามที่จะส่งผลกระทบต่อการโหลดของปลั๊กอินดังนั้นเราจึงไม่สามารถทำได้จากภายในปลั๊กอินเพราะมันสายเกินไป ในรูปแบบก็จะสายเกินไป
โชคดีที่ WordPress มี"ต้องใช้ปลั๊กอิน"นี่คือปลั๊กอินที่คุณสามารถเพิ่มที่โหลดก่อนและแยกจากปลั๊กอินปกติและไม่ปรากฏในรายการปลั๊กอินปกติ
สิ่งที่คุณต้องทำเพื่อเพิ่มรหัสนี้ลงใน Must Use Plugin คือการสร้างwp-content/mu-plugins
ไดเรกทอรี (หากยังไม่มีอยู่) และสร้างไฟล์ PHP (สามารถเรียกได้ว่าเป็นอะไรก็ได้) ด้วยรหัสนั้น คุณไม่ต้องการส่วนหัวของปลั๊กอินหรือสิ่งอื่นใด
ตอนนี้โค้ดนั้นจะถูกโหลดก่อนปลั๊กอินอื่น ๆ ทั้งหมดเมื่อ WordPress โหลด เนื่องจากตัวกรองของเราอยู่ในตำแหน่งเมื่อ WordPress ได้รับรายการของปลั๊กอินที่ใช้งานเพื่อโหลดปลั๊กอินที่คุณต้องการปิดการใช้งานจะถูกกรองออกจากรายการนั้นถ้า WP-CLI ใช้งานอยู่
get_option()
จะกลับมาเร็ว ๆ นี้เมื่อมีการบันทึกค่าในแบบชั่วคราว / ที่คล้ายกันและตัวกรองนี้ถูกข้ามไปหรือไม่ (ใช้งานไม่ได้ในกรณีส่วนใหญ่เฉพาะในหน้าจอปลั๊กอินผู้ดูแลระบบที่ได้รับการดำเนินการจริง)