触发 wp_update_plugins cron 自动更新 WordPress 中的插件



我正在尝试使用WordPress强制插件更新,但它似乎不起作用。我需要在自定义插件本身中强制这些更新。

我在插件中添加了以下过滤器:

add_filter( 'auto_update_plugin', '__return_true' );

我确保wp_config文件中的任何内容都不允许自动更新。即使我不需要,为了安全起见,我还设置了:

define( 'FS_METHOD', 'direct' );define( 'WP_AUTO_UPDATE_CORE', true );

然后,我安装了高级 Cron 管理器插件来触发wp_update_plugins事件,但这没有更新任何插件。

我决定简单地在 init 上调用我的插件中的wp_maybe_auto_update()函数......它工作并更新了我的插件 - 但也禁用了它!

我想知道是否有人知道为什么运行wp_update_pluginscron 事件不会更新任何插件?这里一定有一个非常简单的解决方案,我错过了!您的帮助将不胜感激!

您可以使用以下函数以编程方式更新插件:

function upgrade_plugin( $plugin_slug ) {
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
wp_cache_flush();

$upgrader = new Plugin_Upgrader();
$upgraded = $upgrader->upgrade( $plugin_slug );

return $upgraded;
}

你可以把它与get_plugins结合使用

// Check if get_plugins() function exists. This is required on the front end of the
// site, since it is in a file that is normally only loaded in the admin.
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$all_plugins = get_plugins();

然后循环访问它以更新插件

foreach ( $all_plugins as $key => $value ) {
upgrade_plugin( $key );
}

我发现这篇文章在整理这个答案时很有用:https://wpreset.com/programmatically-automatically-download-install-activate-wordpress-plugins/

从上面的答案中,我得到了这个工作,你只需要从 ABSPATH 中删除额外的/include_once .'/wp-admin/include/class-wp-upgrader-skin.php'; 制作它:include_once ABSPATH。'wp-admin/include/class-wp-upgrader-skin.php';

当我依靠cron 事件(使用 WP Crontrol 插件进行测试(来处理插件更新时,以下代码似乎正在使用给定的必需文件:

include_once ABSPATH . 'wp-admin/includes/file.php';
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
include_once ABSPATH . 'wp-admin/includes/misc.php';
$upgrader = new Plugin_Upgrader();
$result = $upgrader->upgrade($plugin_slug);
if (is_wp_error($result) || !$result) {
// Check if error, else updated successfully
}

最新更新