web-dev-qa-db-ja.com

最低限ではないプラグインが更新されないようにするにはどうすればよいですか PHP バージョンは満足されていますか?

私はWordPress.orgで配布されているかなり普及しているプラ​​グインを持っています。 I PHP 5.2のサポートを終了する必要があります 少なくとも PHP 5.2のサポートを終了したいのですが、最低限必要な場合は PHP 5.4、遅い静的バインディングと便利なクロージャ、素晴らしいでしょう。

あなたがPHP7を言う前に、プラグインはそれを実行している100,000以上のサイトしか持っていないことを覚えておいてください。 すべてのWordPressサイト の場合、10%のサイトがon PHP 5.3以下です。私は1万サイトを壊す危険がない。

PHP minimum version header を追加しますが、プログラムレベルではまだ何もしていません。

PHP バージョン要件が設定されていない限り、私はプラグインの更新を一貫してショートさせるための正しいパターンを探しています。誰かがこれを行うための防弾方法を持っていますか?

6
JPollock

現時点では、これは不可能です。 PHP最小バージョンヘッダが実装されていないわけではありません。

それが終わったら、それは可能でしょう。それまでは、プラグインコードだけでDIYすることはできません。

理論的には、PHPバージョンが満たされていない場合、そのプラグインの将来のアップデートをブロックするようなアップデートをリリースすることはできますが、それでもプラグインがアクティブでないときにアップデートを受け取ることはできません。そのため、プラグインの更新はWordPressによって行われ、プラグイン自体によっては行われないため、実行できません。

3
Otto

canできると思います。

このプロセスを使用して、プラグインのアクティブ化の最小バージョンを確認します。これのバリエーションを使用して、アップグレード中に確認できます(ただし、このコードを含む新しいバージョンにアップグレードすると、プラグインが非アクティブになると思います)。

最小バージョンを確認するコード:

function is_requirements_met()
{
    $min_wp = '4.6' ; // minimum WP version
    $min_php = '5.3' ; // minimum PHP version
    // Check for WordPress version
    if ( version_compare( get_bloginfo('version'), $min_wp, '<' ))
    {
        return false ;
    }
    // Check the PHP version
    if ( version_compare(PHP_VERSION, $min_php, '<'))
    {
        return false ;
    }
    return true ;
}

....そして、これは、バージョンが要件に一致しない場合にプラグインを無効にします(関数はfalseを返しました)

if ( is_plugin_active( plugin_basename(__FILE__)))
    {
        deactivate_plugins( plugin_basename(__FILE__)) ;
        // Hide the default "Plugin activated" notice
        if ( isset ($_GET['activate']))
        {
            unset ($_GET['activate']) ;
        }
    }

次に、プラグインが無効になったことを知らせる管理者メッセージを表示します。

add_action('admin_notices', 'show_notice') ;

show_notice関数は、却下可能な管理通知を表示します。

function show_notice()
{
    echo '<div class="notice notice-error is-dismissible"><h3><strong>Plugin </strong></h3><p> cannot be activated - requires at least WordPress 4.6 and PHP 5.3.&nbsp;&nbsp;&nbsp;Plugin automatically deactivated.</p></div>' ;
    return ;
}

うまく動作します。

追加するために編集されました

プラグインのアップグレードをブロックするためにプラグインにコードを配置した場合(次のようなもの: https://stackoverflow.com/questions/17897044/wordpress-how-to-disable-plugin-update )。

プラグインの新しいバージョンには、プリロードスタブがあります。 PHPバージョンのチェックを行います。 OKの場合、プラグインの残りをロードします。そうでない場合は、プラグインの残りをロードしないでください。プリロードスタブのコードは、すべてのPHPバージョンで機能します。

プリスタブにはPHP 7xコードが含まれていないため、スタブの前処理でエラーは発生しません。事前スタブは、私の元の答えに似たものを使用してプラグインを無効にします。

PHPバージョンが7xの場合、プリロードスタブは残りのプラグインをロードします。そしてボブはあなたのおじです。

0
Rick Hellewell

F ** k Luddites;)

直接質問に答えているわけではありませんが、私自身がセミポピュラーなプラグインを5.2から5.3に移動した経験は、あなたがwordpress.orgの使用状況を見て予想するよりもはるかに摩擦が少ないということです。サイトの所有者.

そしてもちろん、生産現場に直接変更を加える人々は、彼らが何を得ても値するだけです;)

ある意味では、非互換性についての目立つ通知を表示できない限り、ユーザーを傷つけているのではなく、ユーザーがサーバー環境をアップグレードするインセンティブを得る方法がないため、ユーザーにはわからないでしょう。新機能やセキュリティアップデートを入手しないでください。

0
Mark Kaplun