如何禁用核心和插件更新

时间:2013-10-30 作者:Josh Karteson

有没有办法禁用核心和插件更新?我正在修改一个插件和一点WordPress Core (我知道这样做是一种罪恶),但情不自禁。

3 个回复
最合适的回答,由SO网友:Abhishek Kaushik 整理而成

是的,你可以做到…

define( \'DISALLOW_FILE_MODS\', true ); 
将此片段放入wp-config.php 文件,您将能够禁用核心和插件更新。

SO网友:kaiser

同时禁用插件更新应该非常简单:

<?php
defined( \'ABSPATH\' ) or exit;
/* Plugin Name: (#120589) Disable Plugin Updates */
remove_action( \'load-update-core.php\', \'wp_update_plugins\' );
拒绝(或重新路由)主题/插件更新可通过以下方式停用单核和主题更新this script 我的Mark Jaquith:

对于某些主题文件中的插件

// Plugins
add_filter( \'http_request_args\', \'cws_hidden_plugin_12345\', 5, 2 );
function cws_hidden_plugin_12345( $r, $url )
{
    if ( 0 !== strpos( $url, \'http://api.wordpress.org/plugins/update-check\' ) )
        return $r;

    $plugins = unserialize( $r[\'body\'][\'plugins\'] );
    unset(
        $plugins->plugins[ plugin_basename( __FILE__ ) ],
        $plugins->active[ array_search( plugin_basename( __FILE__ ), $plugins->active ) ]
    );
    $r[\'body\'][\'plugins\'] = serialize( $plugins );

    return $r;
}
对于主题中的主题functions.php 文件

// Themes
add_filter( \'http_request_args\', \'cws_hidden_theme_12345\', 5, 2 );
    function cws_hidden_theme_12345( $r, $url )
    {
    if ( 0 !== strpos( $url, \'http://api.wordpress.org/themes/update-check\' ) )
        return $r;

    $themes = unserialize( $r[\'body\'][\'themes\'] );
    unset(
        $themes[ get_option( \'template\' ) ],
        $themes[ get_option( \'stylesheet\' ) ]
    );
    $r[\'body\'][\'themes\'] = serialize( $themes );

    return $r;
}
禁用任何自定义插件中的特定插件,如下所述in this answer here on the stack:

<?php
defined( \'ABSPATH\' ) or exit;
/* Plugin Name: (#120589) Disable Aksimet Updates */
add_filter( \'site_transient_update_plugins\', \'wpse120589DisableAkismetUpdates\' );
function filter_plugin_updates( $value )
{
    unset( $value->response[\'akismet/akismet.php\'] );
    return $value;
}
核心更新实际上应该很简单:

<?php
defined( \'ABSPATH\' ) or exit;
/* Plugin Name: (#120589) Disable Core Updates */
add_filter( \'pre_site_transient_update_core\', \'__return_null\' );
对于旧版本John Billion has written a complete plugin 这是针对他们所有人的。

自动更新的进一步信息和细粒度控制put up a post on WordPress/Make 关于该主题的详细信息:

版本控制是一个关闭开关:

如果WordPress检测到版本控制系统,它会识别您知道自己在做什么,并避免任何类型的自动更新。它寻找Subversion、Git、Mercurial和Bazaar,而且到处都是。

它通过搜索两个目录(ABSPATH和您正在更新的任何目录,如WP_PLUGINS_DIR, 或WP_LANG_DIR) 对于VCS目录(.svn, .git, .hg, .bz). 而且它看起来也更高一级,并且一直在寻找,直到它到达驱动器的根。因此,如果您在运行单个Subversion签出//var/www//var/www/mysite.com/, WordPress安装在/var/www/mysite.com/public_html/wordpress/ 将被阻止接收更新。显然,这在谨慎的地方是错误的。

禁用文件和主题编辑器也是如此:

这个DISALLOW_FILE_MODS 常量会阻止任何类型的文件系统更改,不仅仅是后台更新,所有用户也会这样做。因此,文件编辑器已不复存在;更新核心、主题或插件的能力;以及安装新主题或插件的能力。

仅有一个的wp-config.php 交换机:

define( \'AUTOMATIC_UPDATER_DISABLED\', (bool) true/false );
以及

# Disables all core updates:
define( \'WP_AUTO_UPDATE_CORE\', false );
 
# Enables all core updates, including minor and major:
define( \'WP_AUTO_UPDATE_CORE\', true );
 
# Enables core updates for minor releases (default):
define( \'WP_AUTO_UPDATE_CORE\', \'minor\' );
有关链接帖子的更多详细信息。

注意:以上所有代码都是在5分钟的google搜索过程中删掉的,因此没有进行测试,只是在视觉上与GitHub WordPress源代码和GitHub搜索结果有所不同/测试。您必须自己验证内容。此外,为了将来,请在您的问题中包含此类研究。

SO网友:Mark Kaplun

简单,不要修改核心。。。。。。修改核心基本上就是分叉wordpress,除非你是开发团队的一员,可以长期维护分叉,否则你会让你的客户陷入死胡同,唯一的升级途径就是重新开发站点。他可能同意,但这需要事先达成一致。

无论如何,在您的情况下,禁用自动更新是不够的,您还需要从仪表板中删除所有升级通知,或者最好确保cient没有对服务器的FTP访问权限。

同样的逻辑也适用于来自可靠来源(例如jetpack)的非平凡插件,但在这种情况下,您可能能够长期维护fork。

要禁用插件更新并阻止任何人尝试手动升级,只需更改插件的名称和目录即可。当然,您应该使用其他插件未使用的插件名称和目录名称,例如"${original plugin name} tailored for $client DON"T UPGRADE" 作为新插件名称和${original plugin name}-for-$client 作为新目录。

结束

相关推荐

private functions in plugins

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