PHP sürümü yetersiz olduğunda eklentiyi iptal etmenin en iyi yolu?


15

PHP 5.1 gerektiren bir eklenti yazıyorsunuz. Birisi PHP 4 ile bir sunucuya yüklemeye çalışır. Bununla nasıl güvenli ve kullanıcı dostu bir şekilde başa çıkıyorsunuz?


Neden buna ihtiyacın var? WP artık PHP <5 üzerinde çalışmıyor
onetrickpony

Bu genel bir soru. Başka bir yüksek PHP sürümüne ihtiyacınız olabilir. WP 3.2'den beri PHP 5.2.4'ün gerekli olduğunu bilmiyordum .
Geert

2
Zaten var olan bir eklentinin PHP gereksinimlerini arayanlar için, mevcut kullanıcılarınıza, gereksinimlerin karşılanmaması durumunda yeni sürüme güncellenmesini önleyerek bir iyilik yapın. BuddyPress'ten bir örnek . Eklentinizin önceki sürümlerinde biraz hazırlık gerektirir, ancak kullanıcılarınız size teşekkür edecektir. Gelecekte PHP gereksinimlerini artırmaya karar verdim, WordPoints'de benzer bir şey yaptım .
JD

Yanıtlar:


15

Bu işlev ve etkinleştirme kancası eklentinin etkinleşmesini önler ve hem minimum PHP hem de WordPress sürümünü kontrol etmenizi sağlar.

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 ) );
}

Php sözdizimi değişiklikleri nedeniyle php dosyası hiç ayrıştırılamazsa bu
işe yaramaz

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

Hangi WP sürümü bu oldu beri emin değilim, ama 3.5 eklentisi aslında etkinleştirmek başarısız ve hata mesajı düzgün yönetici, kullanıcıya gösterilir.

Ancak hata mesajı çevrilmez. Bunun için çeviri dosyalarınızı exitaramadan hemen önce yüklemeniz gerekir .


Bence bu yöntemi sadeliği için tercih ediyorum. Ayrıca, eklenti aslında hiçbir zaman yüklenmez, bu yüzden çok eski bir PHP sürümü durumunda kaldırma rutinlerini tetiklemeye gerek yoktur.
Geert

6

Etkinleştirebilir ve bir hata mesajı gösterebilirsiniz:

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

Ayrıca dönüş ifadesinden önce programlı olarak devre dışı bırakmak da mümkündür ...


Evet, yine de bu ayarı kullanırsanız programlı olarak devre dışı bırakmanız gerekir, çünkü yönetici uyarısına rağmen eklenti etkinleştirilmiş olarak görünecektir.
Geert


1
işlevin version_comparekarşılaştırma için üç parametresi vardır; lütfen kullanınif ( version_compare( phpversion(), '5.1a', '<' ) )
bueltge

1
Bu, yalnızca bu işlevin boole döndürmesini istediğinizde gereklidir
onetrickpony

Ancak, boolean değeri 0 tamsayı değeri ile karşılaştırıldığında daha hızlıdır
bueltge

0

Bu eski bir soru olduğunu biliyorum, ama iyi bir çözüm için bu arama için Gary Pendergast (diğer yanıtlar sözü üsleri birkaç o kapakları gitmek görevinden görmek için iyi bir yol vardı burada , ben kod aşağıda güncelledik PHP sürümünü kontrol etmek için kullanabilirsiniz, ancak neredeyse tüm kontroller için kullanabilirsiniz):

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

Ayrıca yukarıdaki kodu bir özette sakladım .


Bu ne ya?!
Andrei Surdu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.