Php 结帐后以编程方式添加配送方式-WooCommerce

Php 结帐后以编程方式添加配送方式-WooCommerce,php,wordpress,woocommerce,shipping,Php,Wordpress,Woocommerce,Shipping,我正在尝试在签出完成后立即插入一个shipping方法。不幸的是,这不是很好的工作,我不知道为什么。结帐后我试过所有的钩子,但是 这是我的密码: add_action('woocommerce_checkout_create_order', 'action_checkout_order_processed', 10, 1); function action_checkout_order_processed( $order ) { $item = new WC_Order_Item_Sh

我正在尝试在签出完成后立即插入一个shipping方法。不幸的是,这不是很好的工作,我不知道为什么。结帐后我试过所有的钩子,但是

这是我的密码:

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();

}
这是另一个函数中的工作代码,所以我一定是出了什么问题,但不确定是什么问题


如果有人能给我一个提示,请提前感谢

您需要增加
添加操作的优先级

add_action('woocommerce_checkout_create_order', 'action_checkout_order_processed', 10, 1);
有关更多详细信息,请参阅以下链接


我真的不明白你想要实现什么。。。但有可能尝试使用不同的钩子吗

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

这将在客户到达“谢谢”页面时运行您的代码。 或


将在订单状态更改为“处理”时运行代码。

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

谢谢,但我已经试过了。。。它总是给我返回空的错误消息,这是非常奇怪的,你将哪个优先级设置为10?请尝试99、999、9999等。不幸的是,它也不能处理这些。。它一直向我显示这个空的错误消息这就是问题所在,它只是打开了错误消息框,没有消息->感谢回复。我已经试过了,但没用。我试图实现的是只对前端使用一种方法,然后在成功添加订单后更新订单的发货方法。
add_action( 'woocommerce_order_status_processing', 'action_woocommerce_order_status_processing', 10, 1 );