Ви пишете плагін, для якого потрібен PHP 5.1. Хтось намагається встановити його на сервер із PHP 4. Як ви з цим справляєтесь безпечним та зручним для користувача способом?
Ви пишете плагін, для якого потрібен PHP 5.1. Хтось намагається встановити його на сервер із PHP 4. Як ви з цим справляєтесь безпечним та зручним для користувача способом?
Відповіді:
Ця функція та гачок активації запобігає активації плагіну та дозволяє перевірити наявність мінімальної PHP та WordPress версії.
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
Я не впевнений, з якої версії WP це сталося, але в 3.5 плагін насправді не активується і повідомлення про помилку відображається користувачеві в адміністраторі, що є акуратним.
Повідомлення про помилку не переведено. Для цього вам доведеться завантажити перекладацькі файли безпосередньо перед exit
викликом.
Ви можете активувати його та показати повідомлення про помилку:
// 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';
Можливо, також можливо деактивувати її програмно, перед випискою повернення ...
deactivate_plugins
version_compare
мають третю парам для порівняння; будь ласка, використовуйтеif ( version_compare( phpversion(), '5.1a', '<' ) )
Я знаю, що це питання старіше, але для тих, хто шукає хорошого рішення, Гері Пендергаст мав вдалий шлях, який охоплює декілька підстав, згаданих в інших відповідях (див. Його повідомлення тут , я оновив код нижче перевірити версію PHP, але ви можете використовувати її практично для будь-якої перевірки):
// 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' ) );
Я також зберег код вище в суть .