如何避免来自升级通知程序的插件名称冲突?

时间:2013-10-29 作者:Denis de Bernardy

我已经包装了一个快速破解插件,将谷歌分析添加到我的网站。将其命名为“Google Analytics”,果然,WP为我提供了升级v0的机会。1个插件到插件库中的某个随机插件。

我隐约记得它在WP 2.7到3.0之间被提高了几次。是否有新的API可用于禁用此功能,或者唯一的避免方法仍然是在插件名称之前加前缀(不是它们的文件名,而是插件屏幕中显示的实际名称),以使其唯一?

在我的特定用例中,插件位于mc-ga/mc-ga.php 它被命名为“谷歌分析”,以及插件文件头开头的一些其他元字段。WP根据“Google Analytics”(我找不到mc-ga.php repo中的插件文件)。

WP是否允许添加我不知道的额外字段,例如回购URL或真正独特的内容,以避免此类冲突?

4 个回复
最合适的回答,由SO网友:brasofilo 整理而成

您可以通过以下操作从updateble列表中删除插件:

add_action( \'plugins_loaded\', function(){
    add_filter( \'site_transient_update_plugins\', function ( $value ) 
    {
        if( isset( $value->response[\'google-analytics/google-analytics.php\'] ) )
            unset( $value->response[\'google-analytics/google-analytics.php\'] );
        return $value;
    });
});
添加此过滤器将从更新检查中完全消除同名插件。它假设我们正在通过简单的FPT上传或类似的方式手动进行更新。但有许多因素,如中所述If I rename a plugin (in its main php file) do I still get update notifications?. 根据操作说明(相同的名称,不同的slug),在不使用过滤器的情况下,最好是设置插件Version 标题设置为更大的数字或使用不太常规的数字,如yyyy.mm.dd.

如果我们正在设置our own Repo, 我相信不会有任何冲突。

SO网友:sun

我的建议是:在制作插件之前,首先检查您要提供的名称是否已经存在WordPress plugin repository. 如果没有,那么您可以继续开发插件。

如果插件存在,请为插件指定不同的名称。因为升级是基于名称的,所以不能管理两个同名的不同插件。WordPress从官方存储库自动执行此升级选项。

SO网友:Otto

如果你有一个为网站定制的插件,那么就给它的名字——网站的名字——作为前缀。

我们当然不会允许一个名为“Example.com-Google Analytics”的插件进入WordPress。组织目录。

此外,在插件头中添加一个“插件URI”字段。插件URI用作匹配过程的一部分,并提供了比名称更独特的内容来进行匹配。

SO网友:Denis de Bernardy

为后代添加此功能,以防其他人需要:

if (!defined(\'STRICTER_PLUGIN_UPDATES\')) define(\'STRICTER_PLUGIN_UPDATES\', false);

# ============
# WP Updates
# ============

if (STRICTER_PLUGIN_UPDATES) :

# - Drop plugin upgrades when the slugs don\'t match

add_filter(\'site_transient_update_plugins\', function($updates) {
    if (!$updates->response) return $updates;

    foreach ($updates->response as $key => $response) {
        $slug = strpos($key, \'/\') !== false ? dirname($key) : basename($key, \'.php\');
        if ($slug != $response->slug) {
            unset($updates->response[$key]);
        }
    }

    return $updates;
});

endif; # STRICTER_PLUGIN_UPDATES

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。