Woocommerce的“ thankyou”挂钩仅运行一项功能

时间:2018-08-01 08:56:46

标签: php wordpress function woocommerce hook

我有两个正在开发的插件,每个插件都有以下添加动作挂钩:

add_action( 'woocommerce_thankyou', 'dayticket_wc_order_processing', 11, 1 );
add_action( 'woocommerce_thankyou', 'custom_wc_order_processing', 20, 1 );

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

我环顾四周,发现了一些解决方案,但没有一个起作用。首先,我尝试获取以下辅助功能:

blayney_dayticket_generate_ticket_pdf($order_id, $tickets);
blayney_alth_litfest_generate_ticket_pdf($order_id, $tickets);

使用以下代码通过一个主功能触发:

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;
}

如果这不起作用,我使用主代码通过使用以下代码在每个插件中调用两个单独的函数:

add_action( 'woocommerce_thankyou', 'master_function', 11, 1);
function master_function() {
        return array(custom_wc_order_processing(), dayticket_wc_order_processing());

}

像以前一样,它总是运行第一个功能,但从不运行第二个功能。

任何帮助将不胜感激。

谢谢大家

编辑:

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

第一个插件:

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;
}

第二个插件:

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;
}

可以吗?

1 个答案:

答案 0 :(得分:0)

我通过将参数传递到woocommerce_thankyou挂钩中来测试本地主机,并且也没有参数,但在两种情况下都可以正常工作。

您可以使用下面的代码检查其是否可以在您的服务器上正常工作:

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个文件。我还检查了两个不同的插件文件,它们也都可以正常工作。