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?
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?
Câu trả lời:
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 ) );
}
/**
* 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 exit
cuộc gọi.
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 ...
version_compare
có một thông số thrid để so sánh; vui lòng sử dụngif ( version_compare( phpversion(), '5.1a', '<' ) )
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 .