WP-Cron 是 WordPress 内置的定时任务系统。 “Cron” 这个词来自 Unix/Linux 的计划任务系统,而 “WP-Cron” 则是它的 PHP 模拟版。
它的主要功能是,在特定的时间或周期内自动执行某些任务,比如:
- 定时发布文章 检查插件、主题、核心更新
- 清理临时文件、缓存
- 发送定期邮件
- 执行开发者自定义的计划任务(wp_schedule_event())
WP-Cron不会像系统的 Cron 那样按时间自动执行,而是每当有用户访问网站页面时才会触发; 如果没人访问网站,那么任务就不会执行,大致流程图如下:
用户访问任意页面 → 加载WP环境 → 执行相关代码渲染页面呈现给用户
↓
HTTP异步请求(wp-cron.php)
↓
检查任务系统并执行任务
假设你设置了一篇文章在“凌晨 2 点”自动发布, 但如果你的网站凌晨无人访问,文章就要等到下一个访问者到来时才会被发布,比如4点访问,那就在4点左右发布。
从以上可以看出,WP-Cron虽然提供了开箱即用的方案,不依赖服务器配置,但是缺点也很明显:
- 不是真的定时任务,访问量少的时候可能延迟执行任务,且误差不可控
- 流量大的时候,每次都要请求 wp-cron.php ,造成不必要的性能开销

在生产环境中(尤其是高访问量或重要项目),推荐禁用默认的 WP-Cron,改用系统级任务调度(如 Linux Crontab)定时执行。
原因很简单: 系统计划任务更稳定、更准确、性能更好。
禁用默认 WP-Cron
在 wp-config.php 中添加:
define('DISABLE_WP_CRON', true);
这样 WordPress 就不会在每次访问时HTTP请求调用 wp-cron.php 了。
此时定时任务系统已失效,如果你就只想要这个失效的效果,那就可以了。
使用服务器定时任务(Crontab)
核心就是,http请求 https://你的域名/wp-cron.php?doing_wp_cron
所以不管是用本机服务器的Crontab,还是其他服务器,亦或是其他平台程序,只要能做到:定时访问 wp-cron.php 即可。
这里以网站的服务器Crontab为例。
使用宝塔面板
宝塔面板定时任务很方便:在计划任务中添加任务,任务类型选择访问url,执行周期按需选择,url地址输入:
https://你的域名/wp-cron.php?doing_wp_cron

其他面板可能没有访问url,如果有类似 shell脚本 或 Command 任务类型也可以,内容输入:
curl -s https://你的域名/wp-cron.php?doing_wp_cron > /dev/null 2>&1
如果服务器全局有PHP命令,也可以用命令行的方式:
php /网站目录绝对路径/wp-cron.php > /dev/null 2>&1
关于执行周期,可以看你的网站定时任务最小的那个频率。
下载安装WPunion插件后,有一个定时任务模块,可以很方便查看网站所有的定时任务,比如我这里频率最小的是每小时一次,那就可以设置周期为60分钟(1小时)一次。这样减少不必要的请求,又能不耽误定时任务执行。

使用SSH手搓
如果你没有使用面板,通过SSH登录服务器后,输入命令 crontab -e 打开定时任务编辑器,在最后一行添加:
*/1 * * * * curl -s https://你的域名/wp-cron.php?doing_wp_cron > /dev/null 2>&1
按 “Ctrl+S” 保存,再按 “Ctrl+X” 退出 ( */1 * * * * 就是 “每 1 分钟执行一次” 的意思)