ฉันจะป้องกันไม่ให้ปลั๊กอินโหลดเมื่อทำ WP-CLI ได้อย่างไร


13

ขณะนี้ฉันใช้รหัสนี้ในไฟล์ปลั๊กอินหลักเอง แต่ปลั๊กอินนั้นไม่ใช่ของฉันเองดังนั้นฉันจึงต้องการอัปเกรดได้ตามปกติโดยไม่ต้องเพิ่มรหัสนี้ทุกครั้ง

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

ฉันต้องทำเช่นนี้เพราะปลั๊กอินนี้สร้างข้อผิดพลาดและหยุด wp-cli ให้ทำงานอย่างถูกต้องดังนั้นฉันจึงไม่สามารถปิดการใช้งานปลั๊กอินด้วย wp-cli ทำงานของฉันและเปิดใช้งานอีกครั้ง

มีวิธีที่ฉันสามารถทำสิ่งที่ชอบif x then do not load plugin file xจากภายใน mu-plugin หรือไม่?

คำตอบ:


13

สิ่งแรกที่ 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()จะกลับมาเร็ว ๆ นี้เมื่อมีการบันทึกค่าในแบบชั่วคราว / ที่คล้ายกันและตัวกรองนี้ถูกข้ามไปหรือไม่ (ใช้งานไม่ได้ในกรณีส่วนใหญ่เฉพาะในหน้าจอปลั๊กอินผู้ดูแลระบบที่ได้รับการดำเนินการจริง)
kero

ฮึ่ม ดูที่แหล่งที่มาและเท่าที่ฉันสามารถบอกเหตุผลเดียวที่option_ตัวกรองจะไม่ถูกนำไปใช้คือถ้ามันไม่มีค่าและจะคืนค่าเริ่มต้น
Jacob Peattie

ที่จริงแล้วเป็นกรณี (ไม่มีปลั๊กอินที่ใช้งาน) ฉันไม่ควรรักษาสภาพแวดล้อมในการทดสอบของฉันให้สะอาดเกินไป ..
kero

1
ฉันยอมรับสิ่งนี้เพราะในกรณีของฉันมันเป็นสิ่งที่ฉันต้องการ แม้ว่าโดยทั่วไป--skip-plugin=xตัวเลือกของ wp-cli อาจเป็นวิธีที่ดีกว่าที่จะทำ
NextGenThemes

15

คุณสามารถใช้skip-pluginsตัวเลือกใน WP-CLI เพื่อไม่ให้โหลดปลั๊กอินแต่ละตัวเมื่อใช้ WP-CLI

คุณสามารถใช้มันในคำสั่งเช่นนี้:

wp user list --skip-plugins=my-plugin

หรือคุณสามารถเพิ่มสิ่งนี้ลงในwp-cli.ymlไฟล์ของคุณ:

skip-plugins:
- my-plugin

-1

เพียงตั้งชื่อปลั๊กอิน dir ใหม่จะปิดใช้งาน ฉันทำบางครั้งเพื่อปิดการใช้งานปลั๊กอิน [linux] ชั่วคราว:

mv my-plugin-dir renamed-my-plugin-dir

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