【问题标题】:Reduce form post time by delaying multiple email submission通过延迟多封电子邮件提交来减少表单发布时间
【发布时间】:2017-06-03 12:26:35
【问题描述】:

初始场景: 我在 Wordpress 中有 PHP 脚本,它将多步骤表单帖子的条目存储在 MySQL DB 中,并使用 PHPMailer 在循环中将表单条目通过电子邮件发送到多个电子邮件(从 DB 中检索并设置在数组中)。

问题: 表单发布需要时间来完成,因为它将条目存储在数据库中并将电子邮件发送到多个地址。由于表单发布需要很长时间(超过1分钟),用户会退出表单,影响潜在客户转化。

建议的设计: 表单发布后,只需将表单的条目存储在 DB 表中即可完成表单提交,然后使用计划任务或 cron 作业循环调度电子邮件提交功能直到稍后。 我想这会减少表单提交时间,因为电子邮件提交只是一个后台进程。

如果这是一个好的设计,我可以使用 cron 作业吗?我正在考虑使用 https://www.sitepoint.com/introducing-cron/ 但不确定在表单提交完成后我如何才能真正触发它。 在下面的代码 sn-p 中,我有一个函数可以处理表单提交后发生的事情,但只有在 send_notification 完成/返回后,表单提交才完成。

add_action('gform_after_submission_19', 'send_custom_notification', 10, 2);

function send_custom_notification($entry, $form) {
    send_notification("form_submission", $form, $entry);
    /*Is there a way to dispatch send_notification as a schedule task 
     or cron job so that form submission is finished but notification 
    is background process?*/
}

相反,我需要一种在表单完成后触发 send_notification 的方法。一个功能完成后可以一次调度或触发cron作业或计划任务吗?

【问题讨论】:

    标签: php mysql wordpress forms cron


    【解决方案1】:

    您使用asynchronous function callsprocessing queues。 Laravel 有这样的东西 built-in.

    我推荐第二种方法,因为它提供了许多好处,例如可扩展性和可管理性。

    基本思想是,您将命令发送到队列中并且基本上忘记了它。您有队列作业工作者在其他地方运行,它们将从队列中获取作业并处理它。这样一来,您的原始流程(将作业放入队列的流程)可以恢复其处理,而无需等待这些任务完成。

    【讨论】:

    • 对,这更有意义,谢谢!想知道我是否可以将 RabbitMQ 或 Laravel 合并到 Wordpress,这是推荐的吗?将 Laravel 实施到我现有的 WP 站点会更好吗?我不需要 Heroku,因为我没有使用云 PaaS,只是托管像 Siteground 这样的服务。我有点希望我现在在 Laravel 中制作完整的网站,但现在已经很晚了,因为我已经在使用 WP,肯定会用于下一个项目。
    • 看起来我可以将 Laravel 与 WP 一起使用,rundef.com/using-laravel-within-wordpress-backend。我想我会用 Laravel 和 WP 一起去,因为它有明显的好处,然后我会尝试用 Laravel 排队邮件。
    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    相关资源
    最近更新 更多