延迟一个函数,任何函数!

时间:2017-06-19 作者:Zio Stampella

我正在努力解决我正在研究的Woocommerce实现中的一个问题。在thankyou页面的末尾,我调用了一个函数来自动完成虚拟订单。这反过来会触发其他需要花费大量时间才能执行的函数(在DB中创建一个大的代码数组,并将这些代码连接到订单)。这是意料之中的,我计划将此过程作为背景进行。

出乎意料的是,这会阻碍thankyou页面的创建。

基本上,它会等到一切都完成后,再完成thankyou页面。请注意,thankyou页面不需要从其他流程显示任何内容。它只是被冻结在原地,而那根线却占据了所有的能量。

在我看来,一切都在一个PHP线程中执行;如果它正在做某事,它就不能做其他任何事情。

我有没有办法推迟该功能的启动,直到向客户显示感谢页面?

我正在寻找cron jobs来自动完成订单,但这可能不可靠。我完全不知道如何实现它。

我在其他线程中也发现了其他关于这个问题的提及,但没有什么像是实现这种延迟的“金标准”方法。

感谢大家帮助解决这个问题!

1 个回复
最合适的回答,由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(

    );
}

结束

相关推荐

在Functions.php中正确地将首页的CSS-TEMPLATE_REDIRECT排队?

我想加载一些特定的css来更改WP首页/主页的主体元素的颜色。在我的主题函数文件中,以下代码似乎有效,但有人能告诉我它是否“正确”吗?//Adding and Encuing styles for Front Page add_action( \'template_redirect\', \'front_page_design\' ); function front_page_design(){ if ( is_front_page() || is_home())