You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用doing_action()限制WP Cron动作重复执行时代码无法运行的问题

问题原因

你这段代码的问题很明确:当WP Cron触发upload_file动作时,doing_action('upload_file')会返回true,所以你的判断条件!doing_action(...)就成了false,自然永远不会执行里面的代码。doing_action的作用是检查当前是否正在执行某个动作,而你的函数本身就是这个动作的回调,只要动作触发,这个判断就会把代码拦住。

正确的防重复执行方案

要防止WP Cron重复执行同一个动作,应该用WordPress的临时锁机制(比如set_transient),给正在执行的任务加一个有效期内的锁,这样即使Cron重复触发,也会因为锁存在而跳过执行。示例代码如下:

function upload_to_ipfs() {
    // 定义锁的名称,和动作名对应避免冲突
    $lock_key = 'upload_to_ipfs_running';
    
    // 检查锁是否存在,存在则直接返回(已有实例在运行)
    if (get_transient($lock_key)) {
        return;
    }
    
    // 设置锁,有效期设为任务预估执行时间的2倍(比如10分钟,单位秒)
    set_transient($lock_key, true, 600);
    
    try {
        // 这里写你的核心业务代码
        // Code to run here
    } finally {
        // 无论任务成功失败,都删除锁
        delete_transient($lock_key);
    }
}
add_action('upload_file', 'upload_to_ipfs');
补充说明
  • 锁的有效期要根据任务实际执行时间调整,确保任务能在有效期内完成,同时避免锁过期后重复执行。
  • 用try...finally是为了保证即使代码执行出错,锁也会被删除,不会导致后续任务永远无法执行。

内容的提问来源于stack exchange,提问作者lsbtqba555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:20:41