Sie schreiben ein Plugin, das PHP 5.1 benötigt. Jemand versucht, es auf einem Server mit PHP 4 zu installieren. Wie gehen Sie damit sicher und benutzerfreundlich um?
Sie schreiben ein Plugin, das PHP 5.1 benötigt. Jemand versucht, es auf einem Server mit PHP 4 zu installieren. Wie gehen Sie damit sicher und benutzerfreundlich um?
Antworten:
Diese Funktion und dieser Aktivierungshook verhindern, dass das Plugin aktiviert wird, und ermöglichen es Ihnen, sowohl nach einer minimalen PHP- als auch nach einer WordPress-Version zu suchen.
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
Ich bin nicht sicher, seit welcher WP-Version dies passiert ist, aber in 3.5 kann das Plugin tatsächlich nicht aktiviert werden und die Fehlermeldung wird dem Benutzer im Admin angezeigt, was ordentlich ist.
Die Fehlermeldung wird jedoch nicht übersetzt. Dazu müssten Sie Ihre Übersetzungsdateien unmittelbar vor dem exit
Anruf laden .
Sie können es aktivieren und eine Fehlermeldung anzeigen:
// 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';
Es ist wahrscheinlich auch möglich, es vor der return-Anweisung programmgesteuert zu deaktivieren ...
deactivate_plugins
version_compare
hat einen dritten Parameter für den Vergleich. Bitte benutzen Sieif ( version_compare( phpversion(), '5.1a', '<' ) )
Ich weiß, dass dies eine ältere Frage ist, aber für diejenigen, die nach einer guten Lösung suchen, hatte Gary Pendergast einen guten Weg, der einige der in den anderen Antworten genannten Grundlagen abdeckt (siehe seinen Beitrag hier , ich habe den Code unten aktualisiert) um die PHP-Version zu überprüfen, aber Sie können sie für praktisch jede Prüfung verwenden):
// 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' ) );
Ich habe den obigen Code auch in einer Zusammenfassung gespeichert .