ユーザがOOPバージョンが5.4
未満の場合は、PHPコードスタイルを使用して、ユーザに通知を表示し、プラグインを無効にします。
非OOPを使ってプラグインを作成するとき、コードはうまく働きます。ユーザーに警告を表示してプラグインを無効にし、ユーザーがプラグインを有効にできないようにします。
作業コードは以下のとおりです。
// check for required php version and deactivate the plugin if php version is less.
if ( version_compare( PHP_VERSION, '5.4', '<' )) {
add_action( 'admin_notices', 'show_notice', 100 );
function show_notice() { ?>
<div class="error"> <p>
<?php
echo 'MyPluginName requires minimum PHP 5.4 to function properly. Please upgrade PHP version. The Plugin has been auto-deactivated.. You have PHP version '.PHP_VERSION;
?>
</p></div>
<?php
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
}
// deactivate the plugin because required php version is less.
add_action( 'admin_init', 'MyPluginName_deactivate_self' );
function MyPluginName_deactivate_self() {
deactivate_plugins(plugin_basename( __FILE__ ) );
}
return;
}
ただし、 オブジェクト指向プログラミング を使用してプラグインを開発する場合、このコードは機能しません。私は以下を試しました:
// check for required php version and deactivate the plugin if php version is less.
if ( version_compare( PHP_VERSION, '5.4', '<' )) {
add_action( 'admin_notices', 'show_notice', 100 );
function show_notice() { ?>
<div class="error"> <p>
<?php
echo 'MyPluginName requires minimum PHP 5.4 to function properly. Please upgrade PHP version. The Plugin has been auto-deactivated.. You have PHP version '.PHP_VERSION;
?>
</p></div>
<?php
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
}
// deactivate the plugin because required php version is less.
add_action( 'admin_init', 'MyPluginName_deactivate_self' );
function MyPluginName_deactivate_self() {
deactivate_plugins(plugin_basename( __FILE__ ) );
}
return;
}
if ( ! class_exists('MyPluginClass') ) :
class MyPluginClass {
function __construct( ){
//enqueue scripts/styles only for front-end
add_action('template_redirect', [$this, 'user_enqueue_scripts']);
//enqueue scripts and style only for admin panel
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
}
}
endif;
$MyPlugin = new MyPluginClass();
if ( ! class_exists('MyPluginClass') ) :
class MyPluginClass {
function __construct( ){}
public function check_php_version (){
// check for required php version and deactivate the plugin if php version is less.
if ( version_compare( PHP_VERSION, '5.4', '<' )) {
add_action( 'admin_notices', 'show_notice', 100 );
function show_notice() { ?>
<div class="error"> <p>
<?php
echo 'MyPluginName requires minimum PHP 5.4 to function properly. Please upgrade PHP version. The Plugin has been auto-deactivated.. You have PHP version '.PHP_VERSION;
?>
</p></div>
<?php
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
}
// deactivate the plugin because required php version is less.
add_action( 'admin_init', 'MyPluginName_deactivate_self' );
function MyPluginName_deactivate_self() {
deactivate_plugins(plugin_basename( __FILE__ ) );
}
return;
}
}
public function init() {
//enqueue scripts/styles only for front-end
add_action('template_redirect', [$this, 'user_enqueue_scripts']);
//enqueue scripts and style only for admin panel
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
}
}
endif;
$MyPlugin = new MyPluginClass();
$MyPlugin->check_php_version(); // show warning if php version is less than 5.4 and deactivate the plugin
$MyPlugin->init();// initialize the plugin.
何が悪いのか教えてください。
これが、OOPを使ってプラグインを作成するときに使用する必要最低限のテンプレートです。お好みに合わせて変更してください。
if ( !defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if ( !class_exists( 'MyPluginName' ) ) {
class MyPluginName {
public function __construct() { // Call your actions/filters here
add_action( 'tag', array( $this, 'plgn_abbr_function' ), 10, 1 );
}
// Begin functions here
public function plgn_abbr_function() {
# Code here...
}
}
}
if ( class_exists( 'MyPluginName' ) ) { // Instantiate the plugin class
global $plgn_abbr;
$plgn_abbr = new MyPluginName();
}
私はすぐにあなたの試みを通してスキミングから気づいたいくつかのこと:
add_actions
を__construct()
の下に呼び出し、あなたの関数をそれの外側に置くことを望むでしょう、しかしあなたはそれのレイアウトも変える必要があるでしょう。add_action
のレイアウトを更新する必要があります
add_action( 'admin_notices', 'show_notice', 100 );
この構造体はclass
を利用するときはうまくいきません。
add_action( 'admin_notices', array( $this, 'show_notice' ), 100 );
以下のように、すべての関数の前にpublic
を追加する必要があります。
public function your_code()
これは私が上で与えたテンプレートを利用するあなたのコードへの更新です、それはテストされて、そして私の側で働きます:
if ( !defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if ( !class_exists( 'MyPluginName' ) ) {
class MyPluginName {
public function __construct() {
// check for required php version and deactivate the plugin if php version is less.
if ( version_compare( PHP_VERSION, '5.4', '<' ) ) {
add_action( 'admin_notices', array( $this, 'show_notice' ), 100 );
add_action( 'admin_init', array( $this, 'MyPluginName_deactivate_self' ) );
return;
}
}
public function show_notice() {
?>
<div class="error">
<p><?php echo 'MyPluginName requires minimum PHP 5.4 to function properly. Please upgrade PHP version. The Plugin has been auto-deactivated.. You have PHP version '.PHP_VERSION; ?></p>
</div>
<?php
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
}
public function MyPluginName_deactivate_self() {
deactivate_plugins( plugin_basename( __FILE__ ) );
}
}
}
if ( class_exists( 'MyPluginName' ) ) { // Instantiate the plugin class
global $plgn_abbr;
$plgn_abbr = new MyPluginName();
}