关闭单个插件的自动更新


10

我有一个我永远都不想更新的插件。我知道这不是最佳做法,但是在这种情况下必须这样做。有什么方法可以阻止WordPress提示我自动更新特定插件(但仍然对所有其他插件保持正常警报)。


6
增加插件主文件中的版本号。99.9......也使的良好措施的自述文件中相同的变化(虽然我不认为这实际需要)..
t31os

如果插件将其版本号更新为类似的值,调整版本号是否仍然有效1.10.1
emc 2013年

Answers:


11

您将其放在主题的functions.php中

// Disable update notification for individual plugins - see my example of plugin block-spam-by-math-reloaded as to how to use this function

function filter_plugin_updates( $value ) {
    unset( $value->response['plugin-folder-name/plugin-file-name.php'] );    
    return $value;
}

add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );

我不明白为什么您的答案中会有Google +1按钮代码……可能还剩下……
brasofilo 2012年

剩下的。抱歉。
塔拉2012年

3
启用或禁用任何其他插件时,此解决方案都会发出警告。Warning: Attempt to modify property of non-object in /home/XXXXXX/public_html/wp-content/themes/XXXXXXX/custom-functions.php on line 15
gurung 2014年

gurung您正在使用哪个版本的WP?
fedmich

7

T31os的答案是正确的:增加插件主文件中的版本号。99.9 ...并在自述文件中进行了相同的更改,以取得很好的效果(尽管我认为实际上并不是必需的).. – t31os


5

尽管Tara的答案很好用,但它要求程序员输入主插件文件的路径,并且仅在启用该特定主题时才起作用。替代解决方案可能如下所示:

add_filter('site_transient_update_plugins', 'remove_update_notification_1234');
function remove_update_notification_1234($value) {
    unset($value->response[ plugin_basename(__FILE__) ]);
    return $value;
}

单行版本:

add_filter('site_transient_update_plugins', function ($value) { unset($value->response[ plugin_basename(__FILE__) ]);return $value; });

将此代码放在.php您要禁用的插件主文件的顶部。如果您打算在站点中多次使用此_1234功能,请将过滤器和函数名称中的更改为一组不同的随机数,以避免重复的函数名称。

可能的是,如果您禁用某个特定插件的更新,那是因为您出于某种原因正在对其进行编辑...因此向该插件添加一些额外的行应该是可行的。


1
在我看来,这是最好的答案,尤其是在您因为自己在编辑插件而禁用更新时。谢谢EMC。
弥敦道

3

使用此代码时,当我安装或更新其他插件时,我得到了上面提到的PHP警告,如“ gurung”。我在WP 4.3.1中看到了PHP警告。

我在stackexchange上找到了有关此问题的其他文章,我想出了一个循环遍历您的插件引用数组的函数,并首先检查是否已经有对该插件的引用(以避免对非对象的PHP警告)如果没有一个),并且有一个对象,它将像原始代码一样将其取消设置。

我还没有完成单元测试,但是在每次更新/安装插件时都收到PHP警告,现在我看不到它们。

function filter_plugin_updates( $value ) {

  // Add references to plugins you want to disable update notices for in the $plugins array
  $plugins = array(
    'k-elements/setup.php'
  );

  foreach( $plugins as $plugin ) {
    if ( isset( $value->response[$plugin] ) ) {
      unset( $value->response[$plugin] );
    }
  }

  return $value;

}
add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );

1

或者,您只是将其重命名,因此它不是同一插件。
您不仅需要重命名文件夹,还需要重命名自述文件和插件标头。


1

我继承了一个使用npc对tara的代码片段进行实现的站点,该站点因gurung的注释而出错。让我疯了。我一直不愿意在插件中编辑代码,直到我意识到该快照程序是自定义的。

要消除错误,请更改此:

unset($value->response[ plugin_basename(__FILE__) ]);

对此:

if($value) {
    unset($value->response[ plugin_basename(__FILE__) ]);
}

对于某些人来说,这可能是显而易见的,但关键是它已经是自定义的,因此您可以对其进行编辑,并且它可能不会被更新覆盖,因为这样做的主要目的是防止您更新插件。


0

您可以通过重命名plugin文件夹(或者,对于单文件插件,重命名该PHP文件)来阻止更新。到目前为止,这是最简单的解决方案。另外,这种方法使得您更改代码对将来的开发人员(包括“将来的您”)透明。


0

主插件文件中的“较高版本”是最好的,但只有在添加特殊的技巧时才可以。它调用一个空/未定义的数字,然后将保留在该版本中。例:

版:

这样可以确保在2100年9月9日之后不会更新它。这是一种废弃的插件的简单方法,该插件有时会被替换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.