Le meilleur moyen d'abandonner le plugin en cas de version insuffisante de PHP?

13

Vous écrivez un plugin nécessitant PHP 5.1. Quelqu'un essaie de l'installer sur un serveur avec PHP 4. Comment gérez-vous cela de manière sûre et conviviale?

    
posée Geert 13.12.2012 - 16:54

4 réponses

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

Je ne suis pas sûr de savoir depuis quelle version de WP cela s'est produit, mais en 3.5 le plugin ne s'active pas et le message d'erreur est affiché à l'utilisateur dans l'admin, ce qui est ordonné.

Cependant, le message d'erreur n'est pas traduit. Pour ce faire, vous devez charger vos fichiers de traduction juste avant l’appel exit .

    
réponse donnée Geert 13.12.2012 - 16:54
14

Cette fonction et ce crochet d’activation empêchent le plugin de s’activer et vous permettent de vérifier la version minimale de PHP et 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 ) );
}
    
réponse donnée Chris_O 14.12.2012 - 11:53
6

Vous pouvez l'activer et afficher un message d'erreur:

// 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';

Il est également probablement possible de le désactiver par programme, avant l'instruction de retour ...

    
réponse donnée onetrickpony 13.12.2012 - 17:28
0

Je sais que c’est une question plus ancienne, mais pour ceux qui recherchaient une bonne solution, Gary Pendergast disposait d’un bon chemin à parcourir, qui couvrait quelques-unes des bases mentionnées dans les autres réponses (voir son article ici , j'ai mis à jour le code ci-dessous pour vérifier le code PHP version, mais vous pouvez l’utiliser pour pratiquement n’importe quelle vérification):

//  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' ) );

J'ai également enregistré le code ci-dessus dans un gist .

    
réponse donnée Joshua Nelson 28.07.2016 - 18:47

Lire d'autres questions sur les étiquettes