หยุดปลั๊กอินในกระบวนการเปิดใช้งานเมื่อไม่ตรงกับรุ่น WP ที่แน่นอนจากนั้นแสดงข้อความแสดงข้อผิดพลาดใน admin_notices action hook


9

ฉันมีปลั๊กอินที่ฉันไม่ต้องการเปิดใช้งานหากไม่ตรงกับหมายเลขรุ่น WP ที่แน่นอนจากนั้นแสดงข้อความแสดงข้อผิดพลาดใน admin_notices action hook เท่าที่ฉันได้วิจัยรหัสด้านล่างเป็นสิ่งที่ดีที่สุดที่ฉันสามารถบรรลุเป้าหมายนี้:

$wp_version = get_bloginfo('version');
if ( $wp_version < 4.5 ) {
    add_action( 'admin_init', 'deactivate_plugin_now' );
    add_action( 'admin_notices', 'errormsg' ) );
}

public function deactivate_plugin_now() {
    if ( is_plugin_active('myplugin/myplugin.php') ) {
        deactivate_plugins('myplugin/myplugin.php');
    }
}

public function errormsg () {
    $class = 'notice notice-error';
    $message = __( 'Error you did not meet the WP minimum version', 'text-domain' );
    printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message );
}

แต่ฉันคิดว่าฉันยังคงทำผิดเพราะฉันได้รับข้อความเปิดใช้งานปลั๊กอินในเวลาเดียวกันพร้อมกับแจ้งข้อผิดพลาดที่ฉันได้รับมอบหมาย

หยุดปลั๊กอินในกระบวนการเปิดใช้งานเมื่อไม่ตรงกับรุ่น WP ที่แน่นอน

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


โปรดพิจารณา @CarlAlber เพื่อพิจารณาคำตอบของฉัน
prosti

คำตอบ:


6

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

การเปิดใช้งานปลั๊กอินล้มเหลว

ตัวอย่าง:

class testPlugin() {

  ...

   static function activate() {

   //[do some stuff here]

   if ($error) {
      die('Plugin NOT activated: ' . $error);
   }

}

register_activation_hook( __FILE__, array( 'testPlugin', 'activate' ));

2

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

วิธีการทำงานที่น่าเกลียดคือการไม่เปิดใช้งานด้วยการสร้างข้อผิดพลาดของ php หรือเอาท์พุท IIRC ใด ๆ ออกไปดังนั้นคุณสามารถเอาท์พุทบางอย่างเช่น "version mismatch" ใน plugin activation hook ซึ่งจะแสดงในช่องแสดงข้อผิดพลาด จะปรากฏขึ้นเมื่อการเปิดใช้งานล้มเหลว

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


2

เมื่อคุณอัปเดตชื่อฉันต้องการให้คำตอบอีกคำตอบก่อนหน้านี้โปรดอย่าเพิกเฉยเพราะมันง่ายกว่านี้มาก

add_action( 'admin_notices', 'my_plugin_admin_notices' );

function my_plugin_admin_notices() {
    if ( ! is_plugin_active( 'hello.php' ) && isset( $_GET['customhello'] ) ) {
        echo '<div class="error"><p>WordPress need to be at least 8.5 to activate this plugin</p></div>';
    }
}

add_action( 'activate_plugin', '_20170113_superess_activate', 10, 2 );

function _20170113_superess_activate( $plugin, $network_wide ) {
    global $wp_version;
    if ( $wp_version < 8.5 && 'hello.php' == $plugin ) {
        $redirect = self_admin_url( 'plugins.php?customhello=1' );
        wp_redirect( $redirect );
        exit;
    }
}

ป้อนคำอธิบายรูปภาพที่นี่

โปรดทราบว่าเมื่อคุณพยายามเปิดใช้งานปลั๊กอินคุณต้องโต้ตอบกับไฟล์ plugins.php ในนั้นคุณจะมีการเปลี่ยนแปลงขนาดใหญ่ที่คุณสามารถเรียกใช้ได้

และในกรณีที่คุณมีข้อผิดพลาดที่ตั้งไว้$_GET['error']ในขณะที่คุณมีเพียงข้อความข้อผิดพลาดที่กำหนดไว้ล่วงหน้า - คุณไม่สามารถสร้างข้อความที่กำหนดเองของคุณเอง นี่คือเหตุผลที่ฉันเสนอวิธีแก้ปัญหาให้คุณ

ป้อนคำอธิบายรูปภาพที่นี่

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


3
สิ่งนี้ใช้ไม่ได้ หากปลั๊กอินไม่ทำงาน WP จะไม่เรียกใช้สคริปต์ในไฟล์ดังนั้นเมื่อกดปุ่มเปลี่ยนเส้นทางฟังก์ชันจะadmin_noticesไม่เริ่มทำงาน
JakeParis

0

วิธีการเกี่ยวกับรหัสนี้เพื่อยับยั้ง hello.php (Hello Dolly) ถ้า WP <8.5:

 add_action( 'activate_plugin', '_20170113_superess_activate' , 10, 2);

 function _20170113_superess_activate($plugin, $network_wide){
      global $wp_version;

      if ( $wp_version < 8.5 && 'hello.php' == $plugin ) {
        error_log( 'WordPress need to be at least 8.5' );      
        $args = var_export( func_get_args(), true );
        error_log( $args );
        wp_die( 'WordPress need to be at least 8.5 to activate this plugin' );
      }
 }

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

ฉันเพิ่มรหัสนี้สำหรับ HelloDolly แต่คุณจะต้องปรับเปลี่ยน

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