首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Woocommerce的“谢谢”钩子只运行一个函数

Woocommerce的“谢谢”钩子只运行一个函数
EN

Stack Overflow用户
提问于 2018-08-01 16:56:46
回答 1查看 1.4K关注 0票数 0

我有两个我正在开发的插件,每个插件都有下面的add action钩子:

代码语言:javascript
复制
add_action( 'woocommerce_thankyou', 'dayticket_wc_order_processing', 11, 1 );
add_action( 'woocommerce_thankyou', 'custom_wc_order_processing', 20, 1 );

但不幸的是,钩子只触发第一个实例,而不触发第二个实例。

我环顾四周,找到了一些解决方案,但都没有奏效。首先,我尝试获取下面的辅助函数:

代码语言:javascript
复制
blayney_dayticket_generate_ticket_pdf($order_id, $tickets);
blayney_alth_litfest_generate_ticket_pdf($order_id, $tickets);

要使用一个主函数触发,请使用以下代码:

代码语言:javascript
复制
add_action( 'woocommerce_thankyou', 'ticket_download', 11, 1);
function ticket_download( $order_id ) {
  global $wp;
  $order_id = absint( $wp->query_vars['order-received'] );
  $tickets = althrop_get_tickets($order_id);

  if (is_array($tickets) && count($tickets) > 0) {
    blayney_dayticket_generate_ticket_pdf($order_id, $tickets);
    blayney_alth_litfest_generate_ticket_pdf($order_id, $tickets);
  } else { 
    echo 'No Ticket available for print!'; 
  }
  exit;
}

当这不起作用时,我使用一个主函数来调用每个插件中的两个单独的函数,方法是使用以下代码:

代码语言:javascript
复制
add_action( 'woocommerce_thankyou', 'master_function', 11, 1);
function master_function() {
        return array(custom_wc_order_processing(), dayticket_wc_order_processing());

}

和以前一样,它总是运行第一个函数,但从不运行第二个函数。

任何帮助都将不胜感激。

谢谢大家

编辑:

每个插件都有与上述钩子相关的代码:

第一个插件:

代码语言:javascript
复制
add_action( 'woocommerce_thankyou', 'dayticket_wc_order_processing', 11, 1 );
function dayticket_wc_order_processing( $order_id ) {
    global $wp;
    $order_id = absint( $wp->query_vars['order-received'] );
    $tickets = althrop_get_tickets($order_id);

    if (is_array($tickets) && count($tickets) > 0) {
        blayney_dayticket_generate_ticket_pdf($order_id, $tickets);
    } else { 
        echo 'No Ticket available for print!'; 
    }
    exit;
}

第二个插件:

代码语言:javascript
复制
add_action( 'woocommerce_thankyou', 'custom_wc_order_processing', 20, 1 );
function custom_wc_order_processing( $order_id ) {
    global $wp;
    $order_id = absint( $wp->query_vars['order-received'] );
    $tickets = alth_litfest_get_tickets($order_id);

    if (is_array($tickets) && count($tickets) > 0) {
        blayney_alth_litfest_generate_ticket_pdf($order_id, $tickets);
    } else { 
        echo 'No Ticket available for print!'; 
    }
    exit;
}

这样可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 21:07:52

我在本地主机上进行了测试,将参数传递到woocommerce_thankyou钩子中,也没有参数,但在这两种情况下,它都工作得很好。

您是否可以使用以下代码检查,以确保它在您的服务器上正常工作:

代码语言:javascript
复制
add_action( 'woocommerce_thankyou', 'dayticket_wc_order_processing', 11, 1 );
add_action( 'woocommerce_thankyou', 'custom_wc_order_processing', 20, 1 );

function dayticket_wc_order_processing($order_id){

    $fp = fopen($_SERVER['DOCUMENT_ROOT']."/dayticket_wc_order_processing.txt","a") or die("Can't open the requested file");
    fwrite($fp, ("Order Id ".$order_id));
    fwrite($fp,("\n"));
    fclose($fp);
}

function custom_wc_order_processing($order_id){

    $fp = fopen($_SERVER['DOCUMENT_ROOT']."/custom_wc_order_processing.txt","a") or die("Can't open the requested file");
    fwrite($fp, ("Order Id ".$order_id));
    fwrite($fp,("\n"));
    fclose($fp);
}

add_action( 'woocommerce_thankyou', 'my_custom_tracking' );
add_action( 'woocommerce_thankyou', 'my_custom_tracking2' );

function my_custom_tracking($order_id){

    $fp = fopen($_SERVER['DOCUMENT_ROOT']."/my_custom_tracking.txt","a") or die("Can't open the requested file");
    fwrite($fp, ("Order Id ".$order_id));
    fwrite($fp,("\n"));
    fclose($fp);
}
function my_custom_tracking2($order_id){

    $fp = fopen($_SERVER['DOCUMENT_ROOT']."/my_custom_tracking2.txt","a") or die("Can't open the requested file");
    fwrite($fp, ("Order Id ".$order_id));
    fwrite($fp,("\n"));
    fclose($fp);
}

我检查了localhost,它创建了上述4个文件。我还签入了两个不同的插件文件,它也在工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51629183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档