我如何阻止插件更新,除非它满足最低的PHP版本?

时间:2018-03-07 作者:JPollock

我在WordPress上发布了一个插件。相当受欢迎的组织。我have to drop support for PHP 5.2我想至少放弃对PHP 5.2的支持,但如果我可以使用最小的PHP 5.4,最新的静态绑定和有用的闭包,那就太好了。

在说PHP7之前,请记住该插件只有100000多个站点运行它。对于all WordPress sites, 10%的网站使用PHP 5.3或更低版本。我不会冒险破坏10k个站点。

我们将添加PHP minimum version header, 但在编程层面上,这还没有起到任何作用。

除非设置了PHP版本要求,否则我正在寻找正确的模式来持续缩短插件的更新。有人有防弹的方法吗?

3 个回复
SO网友:Otto

目前,这是不可能的。如果没有实现PHP最小版本头,就不能这样做。

当这一切完成后,这将成为可能。在此之前,您不能仅通过插件代码进行DIY。

理论上,如果不符合PHP版本,您可以发布一个更新来阻止该插件的未来更新,但即使这样,也不会阻止插件在不活动时接收更新。因此,无法完成,因为插件更新是由WordPress完成的,而不是插件本身。

SO网友:Rick Hellewell

我想是的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 ;
}
很好用。

Edited to add

如果您在插件中添加代码以阻止插件升级(类似于以下内容:https://stackoverflow.com/questions/17897044/wordpress-how-to-disable-plugin-update ).

新版本的插件有一个预加载存根。它将检查PHP版本。如果OK,加载插件的其余部分。如果没有,请不要加载插件的其余部分。预加载存根中的代码将在所有PHP版本中工作。

预存根不包含任何PHP 7x代码,因此预处理存根不会导致错误。pre-stub还将使用与我的原始答案类似的东西禁用插件。

如果PHP版本是7x,那么预加载存根将加载插件的其余部分。鲍勃是你叔叔。

SO网友:Mark Kaplun

F**k勒德分子;)

虽然没有直接回答这个问题,但我自己将一个半流行的插件从5.2迁移到5.3的经验是,与您可能期望的wordpress相比,摩擦要小得多。组织使用统计数据,这些摩擦通常很容易被网站所有者处理。

当然,那些在生产现场进行直接更改的人,他们得到的一切都是应得的;)

在某种程度上,除非你能就不兼容问题给出明确的通知,否则你对用户的伤害大于帮助,因为没有这样的通知,他们就无法获得升级服务器环境的激励,也不会知道他们永远不会获得新功能或安全更新。

结束

相关推荐

如何在不修改函数的情况下挂接WP初始化。php

我们对标准WP安装进行了一些定制,特别是一个自定义的post类型,一些使用CMB2实现的自定义字段,以及一些使用admin_menu, admin_bar_menu, 和wp_dashboard_setup 事件。我们还将init 自定义帖子和字段的事件。我们在自定义php文件中定义了事件挂钩,该文件是函数末尾所需的。php。这一切都很好,但我担心的是,这种安排确实需要对功能稍作修改。php,它是WordPress源代码的一部分。当我们需要升级时,这不是一个问题吗(因为functions.php将在升级中