[woocommerce_process_shop_order_meta在批量编辑订单时不触发?

问题描述 投票:0回答:1

我做了一个简单的功能,当管理员编辑Woocommerce订单时可以运行:

add_action( 'woocommerce_process_shop_order_meta', 'myfunction' );

myfunction在我编辑单个订单时工作正常。它检查订单中是否包含特定产品,以及是否找到了该产品,则某些数据已添加到MailChimp。

当我批量编辑订单时,特别是将订单状态更改为“已完成”,该挂钩似乎没有运行。订单已更改为“已完成”状态,但没有数据发送给MailChimp。

这里是我的功能,以防万一,但是我怀疑这是woocommerce_process_shop_order_meta不在批量编辑模式下运行的问题。

function myfunction( $order_id ){
    $order = wc_get_order( $order_id );
    $items = $order->get_items(); 
    foreach ( $items as $item_id => $item ) {
        $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
        if ( $product_id === 4472 ) {
            $email = $order->get_billing_email();
            $first_name = $order->get_billing_first_name();
            $last_name = $order->get_billing_last_name();
            sample_order_mailchimp($email, $first_name, $last_name);
            break;
        }
    }
}

我在这里错过明显的东西吗?

wordpress woocommerce hook action bulkupdate
1个回答
0
投票

因此,钩子的工作方式是:批量编辑订单时woocommerce_process_shop_order_meta不会触发。

在批量编辑Woocommerce订单时,您可以使用名为handle_bulk_actions-edit-shop_order的钩子。

我认为Woocommerce确实应该在记录所有这些方面做得更好。我只需要通过反复试验就可以弄清楚。这是最终的解决方案:

add_filter( 'handle_bulk_actions-edit-shop_order', 'myfunction', 10, 3 ); // the last two parameters are critically important. They specify: 10 for priority, 3 for how many arguments you pass to your function! Without this, you can't process the order ids
function myfunction( $redirect_to, $action, $order_ids ) {
    if ( $action === 'mark_completed' ) {
       // Do your magics here. This is only fired if the bulk edit action was to mark the orders completed. You can change that as you need.
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.