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

能否延迟执行WordPress函数?解决新用户团队信息为空问题

延迟执行WordPress注册邮件函数解决方案

由于WooCommerce Memberships for Teams插件在用户注册完成后才会分配团队,直接在user_register钩子触发时发送邮件会导致团队名称为空。可以通过WordPress的单次定时事件实现延迟执行邮件发送,确保团队分配完成后再获取团队信息。

代码修改步骤

  1. 替换原注册触发逻辑,改为调度延迟任务
    移除你原来的registration_email_to_admin函数及对应的钩子,替换为以下代码,用于调度延迟执行的邮件发送任务:
add_action( 'user_register', 'schedule_delayed_registration_email_to_admin', 10, 1 );
function schedule_delayed_registration_email_to_admin( $user_id ) {
    // 设置延迟时间,这里是5分钟(300秒),可根据需求调整
    $delay_seconds = 300;
    $run_time = time() + $delay_seconds;

    // 检查是否已有相同任务,避免重复调度
    $existing_task = wp_next_scheduled( 'custom_delayed_admin_registration_email', array( $user_id ) );
    if ( ! $existing_task ) {
        wp_schedule_single_event( $run_time, 'custom_delayed_admin_registration_email', array( $user_id ) );
    }
}
  1. 添加延迟任务的执行函数
    注册自定义钩子并编写邮件发送逻辑,确保延迟后执行:
add_action( 'custom_delayed_admin_registration_email', 'send_delayed_registration_email_to_admin', 10, 1 );
function send_delayed_registration_email_to_admin( $user_id ) {
    // 验证用户是否存在,防止无效ID导致错误
    $user = get_user_by( 'id', $user_id );
    if ( ! $user ) {
        return;
    }

    // 触发管理员通知邮件
    wp_new_user_notification( $user_id );
}
  1. 保留原邮件内容过滤函数
    你之前编写的custom_wp_new_user_notification_admin_email过滤函数无需修改,延迟发送时用户已完成团队分配,wc_memberships_for_teams_get_teams()将能正确获取团队名称。

关键注意事项

  • 调整延迟时间:根据团队分配的实际耗时修改$delay_seconds的值,比如1分钟设为60秒,确保团队分配完成后再执行邮件发送。
  • 确保Cron正常运行:WordPress的定时任务依赖内置Cron功能,如果你的网站Cron未正常启用,需联系主机服务商开启,或使用服务器系统Cron替代(更稳定)。
  • 避免重复调度:代码中加入了wp_next_scheduled检查,防止同一用户注册时重复创建延迟任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:25:12