在POST完成保存后运行函数--可能是回调函数?

时间:2021-05-30 作者:Zeth

保存新帖子(特定帖子类型)后,必须运行给定操作。问题是该操作正在调用外部(慢速)API,这意味着(非logget-in)最终用户在创建此新帖子时可能需要等待20-30秒(不利于用户体验)。

My own solution (not implemented yet)

<用户单击“创建”
  • 初始保存操作后,将保存post\\u元字段:update_post_meta( "automation_operation_has_run", false, $post->ID );automation_operation_has_run 是false 并为给定的post调用该外部API。这个电话显然也会这样做:update_post_meta( "automation_operation_has_run", true, $post->ID ); (防止触发两次)
  • 。。。只是感觉有点笨拙。如果外部API调用需要1分钟以上的时间才能重新发送(无休止的循环,意外地运行了两次自动化操作,等等),那么很容易出错。

    有没有更好的方法来避免使用cron作业?当帖子保存完毕后,是否有一个回调函数可以使用,而最终用户无需等待该函数完成?

    <小时/>

    Extra info

    <帖子类型是WooCommerce网站上的“wc\\U订单”

    1 个回复
    最合适的回答,由SO网友:maryisdead 整理而成

    如果您对API没有控制权,那么您的做法几乎是正确的。这就是cron工作的目的。

    需要避免的是可能会重复执行相同操作的API调用。为什么不改为使用一个元字段automation_operation_status 存储…状态?喜欢pending, running, complete, error.

    然后,在cron作业中,您只需查询那些挂起的。如果进程真的那么长,您甚至可以将其限制为每次运行一到两个作业。

    只需使用cron作业频率,避免PHP超时。

    最后,理想的解决方案是API本身提供一个快速队列,在那里可以存储作业以供以后处理。除此之外,还有一个可以查询处理状态的服务。或者是在作业完成时发布回WordPress安装的服务(如果需要该信息)。

    所有这些您也只能通过cron jobs调用。

    这样,您可以将对面向前端的服务器的压力降到最低。

    相关推荐

    How to use wp-ajax in wp-cron

    我已经创建了一个自定义wordpress插件,其中我使用的是wp ajax。在类的\\uu构造中,我有一个操作(admin\\u footer),以便在wp之后使用wp\\u enqueue\\u脚本和wp\\u localize\\u脚本instructions因此,流程类似于php->js->和php我为什么这么做?避免内存限制错误。Here 说得很好:“上面的解决方案通过将单个大型任务分解为多个小型任务来绕过PHP的限制”一切都像一个后台的魅力!我的问题是如何管理此过程以与wp cron