【问题标题】:Woocommerce 'thankyou' hook only runs one functionWoocommerce 'thankyou' 钩子只运行一个功能
【发布时间】:2019-01-08 18:47:21
【问题描述】:

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

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

这样好吗?

【问题讨论】:

  • 你应该在你的问题中提供所有相关代码,因为它目前还不能真正测试。
  • 嗨对不起,这是第一次发帖,我认为以上内容已经足够了。
  • 首先,当您使用woocommerce_thankyou 挂钩时,不需要global $wp;$order_id = absint( $wp->query_vars['order-received'] );... 只需使用if( $order_id ) return; ... 也不需要exit;... 您没有义务声明优先级和钩子中使用的参数数量,因为它们是可选的......
  • 所以更像这样:function custom_wc_order_processing( $order_id ) { if ($order_id) { return blayney_alth_litfest_generate_ticket_pdf($order_id, $tickets); } else { echo 'No Ticket available for print!'; } }
  • 是的,对于钩子:add_action( 'woocommerce_thankyou', 'custom_wc_order_processing' ); 没有函数的优先级和参数数量。这两个代码。

标签: php wordpress function woocommerce hook


【解决方案1】:

我通过将参数传递给 woocommerce_thankyou 挂钩并且也没有参数但在两种情况下都可以正常工作,从而在 localhost 上进行了测试。

您能否使用以下代码进行检查,以确保其在您的服务器上正常工作:

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 个文件。我还签入了两个不同的插件文件,它也可以工作。

【讨论】:

  • 您好,谢谢。在使用简单文本输出进行测试时,两者都运行良好,因此我可以猜测是辅助功能导致了问题。我将在原问题中添加辅助功能的代码!
  • 好的,如果对您有帮助,请标记为相关解决方案。所以它也可以帮助其他人调试或修复错误。
  • 好的,这对最初的问题有所帮助。我只勾选左侧的图标吗? (对不起,我是新人)!
  • Yes ,它显示向上和向下箭头。点击向上箭头。
  • 我点击了向上箭头,但由于我的声望低于 15,它没有显示出来。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2015-05-19
  • 2022-12-15
  • 2011-05-01
  • 1970-01-01
  • 2014-09-28
  • 2021-01-30
  • 1970-01-01
相关资源
最近更新 更多