php 如何从Woocommerce中尚未支付的订单中获取客户ID

9vw9lbht  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(168)

我使用以下代码来获取customer_id:

$order = wc_get_order($order_id);
$customer_id = $order->get_customer_id();

我通过woocommerce_new_order钩子得到了$order
调用之后,$customer_id为0。
如果我var_dump$order,我可以看到完整的对象,包括帐单地址,但客户ID为0。
这种情况发生在新订单创建时,付款前。我可以使用电子邮件来获得客户,但我想知道是否有办法在订单付款前获得客户ID。
谢谢

rt4zxlrg

rt4zxlrg1#

请改用woocommerce_checkout_order_processed操作($order_id是该操作的第一个参数)。
此操作在处理付款之前运行,它对现有客户和在结帐期间注册的客户都有效。请参阅class-wc-checkout.php的源代码:

// line 1171
do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );
// ...
// line 1182
if ( apply_filters( 'woocommerce_cart_needs_payment', $order->needs_payment(), WC()->cart ) ) {
    $this->process_order_payment( $order_id, $posted_data['payment_method'] );
} else {
    $this->process_order_without_payment( $order_id );
}

注意:如果您的客户不需要注册,则get_customer_id()仍可能在客户结账时抛出错误(因为此函数始终返回整数)。您可能希望将代码 Package 为if($order->get_user()){},因为此函数在客户结账时返回false

相关问题