如何创建和修改WordPress定时任务

Cron是一个Unix/Linux实用程序,通常用于在后台运行的Web服务器上安排命令或脚本。Cron作业是任务本身,它用于在定期的固定时间、日期或间隔安排任务。通常,这些涉及重复的任务,这些任务是自动化的以节省时间。在WordPress中,这是由WP-Cron处理的,它用于模拟系统cron。

WordPress的cron作业的一些示例可能涉及安排要发布的文章或按预定义的时间表运行的备份插件。今天我们将深入探讨如何轻松创建、修改和运行WordPress的cron定时作业。

如何设置WordPress Cron作业

需要注意的是,WP-Cron与系统cron略有不同,它们各有优缺点。例如,WP-Cron完全依赖于时间间隔,而系统cron依赖于特定时间。WP-Cron也仅在页面加载时(后端或前端)有效,这可能不太可靠。WordPress提供的默认时间间隔是每小时、每天两次和每天。

要安排WP-Cron事件,您必须创建自定义钩子。我们建议您查看官方WordPress插件手册,其中有关于安排WP Cron事件的惊人指南。如果您正在寻找使用WordPress设置系统cron的替代方法,我们建议您查看Tom Mcfarlin关于定义WordPress cron作业的文章。对于那些可能不那么先进的人,我们将探索如何轻松使用 WP-Cron以及流行的免费WP Crontrol插件。这使您可以查看和控制WP-Cron系统中发生的事情。

WordPress插件-WP Control

WordPress插件-WP Control

WP Crontrol拥有超过80,000次的活跃安装,WordPress社区中的许多人都非常喜欢这个插件。

这个插件超级好用。显示应该运行哪些CRON作业,这是了解正在发生的事情以及它是否有效的很好的第一步。此外,您可以创建新的cron作业并触发现有的运行。— Josh,Caldera Forms的创建者

您可以从WordPress插件库下载它,也可以在WordPress仪表盘中的“安装插件”插件下搜索它。WP Control的功能包括:

  • 能够查看所有cron事件及其参数、重复和下次运行时间。
  • 编辑、删除并立即运行任何cron事件。
  • 添加新的cron事件。
  • 添加、编辑和删除自定义cron计划。

WP-Cron计划

激活后,您可以在WordPress仪表盘设置中的“Cron Schedules”下更改WordPress Cron作业计划。请注意,该插件添加了一个额外的每周默认时间表。您还可以以秒为单位添加其他计划,例如每6小时21600秒。

WP-Cron时间表

WP-Cron时间表

这些间隔也可以使用过滤器与代码一起添加,例如:

add_filter( 'cron_schedules', 'example_add_cron_interval' );
function example_add_cron_interval( $schedules ) {
$schedules['five_seconds'] = array(
'interval' => 5,
'display' => esc_html__( 'Every Five Seconds' ),
);
return $schedules;
}

WP-Cron事件

然后,您还可以使用该插件查看您当前已安排的WordPress Cron作业。在“工具”下单击“Cron Events”。许多动作名称很容易识别,因为它们应该与插件名称的一部分相匹配,例如“woocoomerce_cleanup_sessions”或“gravityforms_cron”。

WP-Cron事件

WP-Cron事件

您只需单击操作名称旁边的“立即运行”即可立即运行Cron事件。这在排除故障时会很有帮助,因为您可能需要多次运行Cron事件。

如何创建和修改WordPress定时任务-1

成功执行cron事件

修改Cron事件

您还可以通过单击操作名称旁边的“Edit”来编辑现有的Cron事件。然后,您可以更改操作名称、参数、下一次运行和计划的重复。请注意这一点,因为许多插件依赖于它们的Cron作业才能正常运行。

修改Cron事件

修改Cron事件

添加Cron事件

您还可以添加Cron事件。在此示例中,我们将为Disqus插件添加WordPress Cron作业。许多人可能想要这样做来改变同步频率,或者如果他们在评论来回同步时遇到问题。每个第三方插件开发人员的文档都应该有他们的cron事件的名称,或者更确切地说是操作名称。在这种情况下,插件使用的是“ dsq_sync_forum ”。

如果您是从头开始创建一个,您将需要在代码中的某处有一个相应的动作钩子,例如您的functions.php文件。这是WP-Crontrol给出的示例:

add_action( 'my_hookname', 'my_function' );

下一步是编写您的函数。

function my_function() {
wp_mail( 'hello@example.com', 'WP Crontrol', 'WP Crontrol rocks!' );
}

对于Disqus,我们首先添加一个新的600秒(10 分钟)的cron计划。然后我们点击“Add Cron Event”并输入“dsq_sync_forum”作为我们的动作名称,选择下一次运行时间,并选择我们刚刚创建的10分钟重复。然后我们点击“Add Cron Event”。这将每10分钟自动运行一次,以便我们手动将Disqus评论同步回我们的WordPress数据库。

添加WordPress Cron作业

添加WordPress Cron作业

就是这样!它真的很容易使用。

WP-CLI管理WP-Cron

您还可以在WP-CLI中管理WP-Cron事件和/或WordPress Cron作业。例如,以下命令将为您提供当前的cron事件列表。

wp cron event list

WP-CLI管理WP-Cron

有关其他命令和参数,请参阅官方WP-CLI cron文档