在本文中,我将介绍 WP Cron 和免费的 WP Crontrol 插件。许多用户甚至不知道 WordPress 有一个预定事件(wp cron)、更不知道它是如何工作的以及它的局限性。但是,出于于故障排除和站点维护目的,我们需要调整wp cron,幸好现在有了WP Crontrol,WP Crontrol 有一个很友好的界面来设置wp cron。
免费的 WP Crontrol 插件

WP CronTrol 是 WordPress 的一个免费插件。它由 John Blackborne 创建,他是备受推崇的 Query Monitor 插件的作者。您可以看到 WP CronTrol 会定期更新。它有超过 200,000 次活跃安装。它有很多五星级的评价,开发人员在支持论坛中很活跃。

你可以在WP CronTrol 的网站查看他的文档。这是一个百分百免费的插件,这个网站上几乎有你需要的所有信息,所以当你使用这个插件时,如果你有问题,那么很容易跳到这里找到答案。

这个插件是在 GitHub 上开发的,即使这个插件已经存在了一段时间,你会看到它仍在积极开发中。
关于WP Cron

现在让我们谈谈 WP Cron 是什么。Cron 这个词来自希腊拉丁语,意思是时间,所以 Cron 事件是预定事件。
Linux 和 Unix Windows 服务器具有定时任务作为其操作系统的一部分。甚至台式机和笔记本电脑也内置了调度程序。Windows、Mac 有一个内置的定时任务,这就是操作系统定时检查更新的方式。因此,计算机系统有一个定时程序是很常见的。对于 WordPress,cron同样用于检测更新和一些其他任务。但是,计算机中的定时任务与 WordPress 上的定时任务之间的区别在于,定时任务在计算机上是一直在运行并定期检查。而使用 WordPress,定时任务仅在页面加载时运行,通常是在访问者访问网站时运行。
计算机与 WordPress定时任务之间的这种差异很重要,原因有几个。有些网站由于某些原因,它们不会获得大量流量。这样定时任务可能无法被激活,有些人会去他们的托管控制面板或他们的 VPS 控制面板,那里通常有一个定时任务程序,您可以在其中安排 WordPress cron cron使用计算机定时任务程序而不是 WordPress cron 定时任务运行。这样即使网站没有人访问,但是定时任务仍然会运行,并且您可以在 WP 配置文件中关闭 WordPress cron,您可以将 WordPress cron定时任务功能迁移到服务器。这是更高级的方式,不过这不是本文讨论的内容。
现在您可能已经建立了一个 WordPress 网站,而且已经运行了一段时间,甚至可能从未意识到有 WP cron 这样的东西。我提到这一点是因为大多数时候 WP cron 只是在幕后按照它应该的方式运行,这不是你真正需要担心的事情。但是,如果你一直在安装和卸载很多插件,这些插件可能会注册一个 cron 作业,因此那里可能有一个孤立的,这可能会减慢你的网站速度,或者可能有一个作业正在运行,它正在创建一个 PHP 错误。因此,有时您可能希望将 WP cron 作为维护或故障排除的一部分进行检查,这就是这个插件真正有用的时候。
那么你可能想知道这些神秘的 WP cron 事件从何而来?其中许多是由 WordPress 核心本身添加的,根据我的经验,如果您删除核心 WordPress cron 事件,WordPress 会自动将其添加回来。但是其他 cron 事件是由插件和主题添加的。

WP cron 事件存储在 options 表中。您会看到所有Cron作业都列在这一行中,它是一个自动加载选项,这意味着当访问者访问网站并启动页面请求的生命周期时,当自动加载为Yes,WordPress 会将自动加载到内存中。你可以看到这是一条很长的记录,你真的不想在这里有不必要的任务。但是我们通过数据库很难对cron作业进行管理,这也是为什么要使用WP Crontrol的原因

现在我们看一个具体的例子
图中的网站使用Blocky 主题。插件里面有高级自定义字段,多合一的 WP 迁移,BBQ 防火墙和 fluent auth 插件。 security ninja插件被停用
WP Crontrol插件本身也已安装。

我们先来查看WP Crontrol 里面的cron schedules,这些是您可以选择 WordPress cron 活动开始的时间。好的,你会看到 WordPress 本身已经定义了一个小时、12 小时、一天和一周作为 cron 事件的时间,然后一个插件添加了一个每月的 cron 事件。在这里你可以添加你自己的运行时间,在左边的add cron shedule里设置name 时间和显示名称,然后点击添加按钮添加就可以了
以这种方式添加 cron schedule时,它取决于WP Crontrol 这个插件,如果你禁用或者删除了wp Crontrol,这个shedule也就不存在了

现在我们来看 cron 事件,带有小 WordPress 图标的事件是由 WordPress 核心添加的,这里的操作包括清理过期的key,检查 WordPress 版,删除旧的过期隐私导出文件,删除过期的瞬态, 删除自动草稿,多合一的 WordPress 迁移导出清理,插件和主题的更新检查,健康检查、删除临时更新程序备份和 ACF 健康检查。

然后我们这里有两个没有操作的作业,它们来自那个 Security Ninja 插件。我想向您展示有时如何获得孤立的作业,因此我禁用了该插件,但作业仍保留在此处。现在你可以将他删除掉,但请注意,你只能删除由插件或主题添加的或你自己添加的 cron 事件,不能删除 WordPress 核心 cron 事件,插件不允许这样做
钩子的暂停功能是插件开发者添加的一个特性,因为很多时候如果你删除了一个事件,比如一个核心事件或甚至一个插件或主题事件,它可能会被重新添加,比如如果插件重新激活了什么的。暂停该钩子的作用是任务仍然会存在于列表中,但动作不会触发,实际上不会执行,所以什么都不会发生。这是一种如果需要暂停任务的话可以做到的方法。

如果我们去查看其中一个事件,通过编辑它,你会看到有钩子名称,它使用小写和下划线,如果操作接受参数,你可以添加参数以传递给操作,同时可以设置时间。

还有一件事我想展示给你,那就是插件为你提供了一个添加定时事件的界面。你可以有一个标准的定时事件,其中你调用一个钩子。你可以在自定义插件或主题的 functions.php 中定义一个钩子名称,然后将该钩子名称放在那里,以及任何参数和你想要的运行时间。


WP Crontrol 还添加了一个 PHP cron 事件选项,您可以在其中放置自定义 PHP 代码,以及一个 URL cron 事件,您可以在其中点击 URL 来执行某些操作,这是WP Crontrol添加的两种类型的特殊 cron 事件。

当我们创建文章时,当您转到发布选项时,您实际上可以安排将来发布文章,所以在这台计算机上现在是 12:17,所以让我们将其更改为要在 12:30 发布文章。

在cron 事件中我们已经可以看到预定发布的文章。