我正在努力解决我正在研究的Woocommerce实现中的一个问题。在thankyou页面的末尾,我调用了一个函数来自动完成虚拟订单。这反过来会触发其他需要花费大量时间才能执行的函数(在DB中创建一个大的代码数组,并将这些代码连接到订单)。这是意料之中的,我计划将此过程作为背景进行。
出乎意料的是,这会阻碍thankyou页面的创建。
基本上,它会等到一切都完成后,再完成thankyou页面。请注意,thankyou页面不需要从其他流程显示任何内容。它只是被冻结在原地,而那根线却占据了所有的能量。
在我看来,一切都在一个PHP线程中执行;如果它正在做某事,它就不能做其他任何事情。
我有没有办法推迟该功能的启动,直到向客户显示感谢页面?
我正在寻找cron jobs来自动完成订单,但这可能不可靠。我完全不知道如何实现它。
我在其他线程中也发现了其他关于这个问题的提及,但没有什么像是实现这种延迟的“金标准”方法。
感谢大家帮助解决这个问题!
最合适的回答,由SO网友:kero 整理而成
您可以通过WP Cron使用wp_schedule_single_event()
. 然而,要使其正常工作,您需要禁用标准cron(由访问站点的用户运行),而是使用适当的cronjob/crontab。EasyEngine有一个关于disabling wp-cron and using cronjob instead.
另一种方法是通过AJAX请求解决这个问题。您可以通过“谢谢”页面上的JS调用该函数。这个docu explains how to do this, 简单地说就是这样
<script>
jQuery.post(
ajaxurl,
{
\'action\': \'do_my_long_action\',
\'data\': \'some_data\'
},
function(response){
//
}
);
</script>
以及
add_action( \'wp_ajax_do_my_long_action\', \'prefix_ajax_add_foobar\' );
function prefix_ajax_add_foobar() {
// handle request
// sent success message (or wp_die())
wp_send_json(
);
}