【问题标题】:Add shipping method programatically after checkout - WooCommerce结帐后以编程方式添加运输方式 - WooCommerce
【发布时间】:2019-07-11 07:17:35
【问题描述】:

我正在尝试在结帐完成后立即插入送货方式。不幸的是,这不是很好,我不知道为什么。我在结帐后尝试了所有的钩子,但是......

这是我的代码:

add_action('woocommerce_checkout_create_order', 'action_checkout_order_processed', 10, 1);
function action_checkout_order_processed( $order ) {

    $item = new WC_Order_Item_Shipping();

    $item->set_method_title( "Безплатна Доставка - Speedy" );
    $item->set_method_id( "speedy_shipping_method" ); // set an existing Shipping method rate ID
    $item->calculate_taxes("0");

    $shipping_item_id = $order->add_item( $item );

    wc_add_order_item_meta($shipping_item_id, "method_id", "speedy_shipping_method");
    wc_add_order_item_meta($shipping_item_id, "instance_id", "0");
    wc_add_order_item_meta($shipping_item_id, "cost", "0");
    wc_add_order_item_meta($shipping_item_id, "total_tax", maybe_unserialize('a:1:{s:5:"total";a:0:{}}'));

    $order->calculate_totals();

    $order->update_status('on-hold');

    $order->save();

}

这是另一个函数中的工作代码,所以我一定有其他问题,但不确定是什么。

如果有人可以给我提示,请提前感谢!

【问题讨论】:

    标签: php wordpress woocommerce shipping


    【解决方案1】:

    你需要提高add_action的优先级。

    add_action('woocommerce_checkout_create_order', 'action_checkout_order_processed', 10, 1);
    

    更多详情请看以下链接。

    https://developer.wordpress.org/reference/functions/add_action/

    do_action( 'woocommerce_after_checkout_shipping_form', $wccs_custom_checkout_field_pro );

    【讨论】:

    • 谢谢,但我已经试过了......它总是返回我prntscr.com/odh2f2空错误消息,这很奇怪
    • 您设置了哪个优先级而不是 10?
    • 请尝试 99、999、9999 等
    • 不幸的是,它也不适用于这些。它一直向我显示这个空的错误消息
    • 就是这个问题,它只是打开错误消息框并没有任何消息-> prntscr.com/odh9ot
    【解决方案2】:

    我真的不明白你想要达到什么目的......但可能尝试使用不同的钩子?

    add_action( 'woocommerce_thankyou', 'action_checkout_order_processed', 10, 1 );

    当客户到达感谢页面时,这将运行您的代码。 或

    add_action( 'woocommerce_order_status_processing', 'action_woocommerce_order_status_processing', 10, 1 ); 
    

    将在订单状态更改为处理中时运行您的代码。

    【讨论】:

    • 感谢您的回复。我已经尝试过这些,但没有奏效。我想要实现的只是在前端使用一种方法,然后在成功添加后更新订单的运输方式。
    【解决方案3】:

    如果有人对此有疑问,我找到了解决方案。 我修改了 include/admin/meta-boxes/html-order-shipping.php 中的管理订单输出,并在那里强制在每个订单上加载我的自定义方法,因此在这种情况下,用户会在前端看到正确的方法,然后我成功地更新了后端中的方法,这正是我想要实现的。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多