Cách tốt nhất để hủy bỏ plugin trong trường hợp phiên bản PHP không đủ?


15

Bạn viết một plugin yêu cầu PHP 5.1. Ai đó cố gắng cài đặt nó trên máy chủ với PHP 4. Làm thế nào để bạn đối phó với điều đó một cách an toàn và thân thiện với người dùng?


Tại sao bạn cần điều đó? WP không chạy trên PHP <5 nữa
onetrickpony

Đó là một câu hỏi chung. Bạn có thể muốn yêu cầu bất kỳ phiên bản PHP cao hơn nào khác. Điều đó đang được nói, tôi không biết PHP 5.2.4 là bắt buộc kể từ WP 3.2 .
Geert

2
Đối với những người đang tìm kiếm các yêu cầu PHP của một plugin đã có sẵn, hãy ủng hộ người dùng hiện tại của bạn bằng cách ngăn không cho cập nhật lên phiên bản mới nếu các yêu cầu không được đáp ứng. Một ví dụ từ BuddyPress . Phải có một số chuẩn bị trong các phiên bản trước của plugin, nhưng người dùng của bạn sẽ cảm ơn bạn. Tôi vừa làm một cái gì đó tương tự trong WordPoints , trong trường hợp tôi quyết định tăng các yêu cầu PHP trong tương lai.
JD

Câu trả lời:


15

Hàm kích hoạt và móc kích hoạt này ngăn plugin kích hoạt và cho phép bạn kiểm tra cả phiên bản PHP và WordPress tối thiểu.

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

/**
  * Plugin Activation hook function to check for Minimum PHP and WordPress versions
  * @param string $wp Minimum version of WordPress required for this plugin
  * @param string $php Minimum version of PHP required for this plugin
  */
 function activate( $wp = '3.1', $php = '5.2.4' ) {
    global $wp_version;
    if ( version_compare( PHP_VERSION, $php, '<' ) )
        $flag = 'PHP';
    elseif
        ( version_compare( $wp_version, $wp, '<' ) )
        $flag = 'WordPress';
    else
        return;
    $version = 'PHP' == $flag ? $php : $wp;
    deactivate_plugins( basename( __FILE__ ) );
    wp_die('<p>The <strong>Insert PLugin Name Here</strong> plugin requires'.$flag.'  version '.$version.' or greater.</p>','Plugin Activation Error',  array( 'response'=>200, 'back_link'=>TRUE ) );
}

Điều này không hoạt động nếu do cú pháp php thay đổi, tập tin php không thể được phân tích cú pháp
Mark Kaplun

10
/**
 * Plugin Name: Foo
 */

// Check for required PHP version
if ( version_compare( PHP_VERSION, '5.1', '<' ) )
{
    exit( sprintf( 'Foo requires PHP 5.1 or higher. You’re still on %s.', PHP_VERSION ) );
}

// The rest of your plugin code follows

Tôi không chắc từ phiên bản WP này đã xảy ra, nhưng trong phiên bản 3.5, plugin thực sự không kích hoạt và thông báo lỗi được hiển thị cho người dùng trong quản trị viên, rất gọn gàng.

Thông báo lỗi không được dịch, mặc dù. Để làm được điều đó, bạn phải tải các tệp dịch của mình ngay trước exitcuộc gọi.


Tôi nghĩ rằng tôi vẫn thích phương pháp này vì sự đơn giản của nó. Ngoài ra, plugin không bao giờ thực sự được cài đặt, vì vậy không cần kích hoạt các thói quen gỡ cài đặt trong trường hợp phiên bản PHP quá cũ.
Geert

6

Bạn có thể kích hoạt nó và hiển thị một thông báo lỗi:

// if PHP version is lower than 5.1
if(version_compare(PHP_VERSION, '5.1') < 0){

  // show a message inside the dashboard
  if(is_admin()){

    function my_plugin_notice(){      
      ?>
      <div class="error below-h2">
        <p>
        <?php
          printf(__('The abc plugin requires at least PHP 5.1. You have %s'), PHP_VERSION);
         ?>
        </p>
      </div>
      <?php
    }

    add_action('admin_notices', 'my_plugin_notice');

  }

  // stop here and do nothing further
  return;  
}

// if PHP version is equal or higher than 5.1
require dirname(__FILE__) . '/php51code.php';

Có lẽ cũng có thể tắt nó theo chương trình, trước câu lệnh return ...


Vâng, bạn vẫn cần tắt nó theo chương trình nếu bạn sử dụng thiết lập này vì mặc dù có thông báo của quản trị viên, plugin sẽ hiển thị khi được kích hoạt.
Geert


1
hàm version_comparecó một thông số thrid để so sánh; vui lòng sử dụngif ( version_compare( phpversion(), '5.1a', '<' ) )
bueltge

1
Điều đó chỉ bắt buộc khi bạn muốn chức năng này trả về boolean
onetrickpony

Nhưng, giá trị boolean nhanh hơn so với giá trị số nguyên 0.
bueltge

0

Tôi biết đây là một câu hỏi cũ hơn, nhưng đối với những người tìm kiếm một giải pháp tốt, Gary Pendergast đã có một lộ trình tốt để bao gồm một số cơ sở được đề cập trong các câu trả lời khác (xem bài đăng của anh ấy ở đây , tôi đã cập nhật mã dưới đây để kiểm tra phiên bản PHP, nhưng bạn có thể sử dụng nó cho hầu hết mọi kiểm tra):

//  In this example, only allow activation on WordPress 3.7 or higherclass 
MyPlugin {
function __construct() {
    add_action( 'admin_init', array( $this, 'check_version' ) );

    // Don't run anything else in the plugin, if we're on an incompatible WordPress version
    if ( ! self::compatible_version() ) {
        return;
    }
}

// The primary sanity check, automatically disable the plugin on activation if it doesn't// meet minimum requirements.static
function activation_check() {
    if ( ! self::compatible_version() ) {
        deactivate_plugins( plugin_basename( __FILE__ ) );
        wp_die( __( 'My Plugin requires PHP 5.1 or higher!', 'my-plugin' ) );
    }
}

// The backup sanity check, in case the plugin is activated in a weird way,
// or the versions change after activation.
function check_version() {
    if ( ! self::compatible_version() ) {
        if ( is_plugin_active( plugin_basename( __FILE__ ) ) ) {
            deactivate_plugins( plugin_basename( __FILE__ ) );
            add_action( 'admin_notices', array( $this, 'disabled_notice' ) );

            if ( isset( $_GET['activate'] ) ) {
                unset( $_GET['activate'] );
            }
        }
    }
}

function disabled_notice() {
    echo '<strong>' . esc_html__( 'My Plugin requires PHP 5.1 or higher!', 'my-plugin' ) . '</strong>';
}

static function compatible_version() {
    if ( version_compare(PHP_VERSION, '5.1', '<') ) {
        return false;
    }

    // Add sanity checks for other version requirements here

    return true;
}
}
global $myplugin;
$myplugin = new MyPlugin();
register_activation_hook( __FILE__, array( 'MyPlugin', 'activation_check' ) );

Tôi cũng đã lưu mã ở trên trong một ý chính .


Cái quái gì đây?!
Andrei Surdu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.