gpt4 book ai didi

php - WooCommerce 根据用户角色更改 BACS 订单状态

转载 作者:行者123 更新时间:2023-12-04 13:11:49 24 4
gpt4 key购买 nike

我收到几个客户选择“直接银行转账”的订单,然后他们改变了主意,想用信用卡支付。这很烦人,因为我必须手动将订单从“搁置”更改为“待付款”,以便他们可以通过“订单”下“我的帐户”中的“订单支付”端点用卡支付。

我一直在使用 WooCommerce change order status BACS processing自动将订单状态从“暂停”更改为“待付款”。

// WooCommerce Change Order Status BACS Pending

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

function bacs_order_payment_pending_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}

// Get an instance of the WC_Order object
$order = new WC_Order( $order_id );

if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ('on-hold' == $order->status ) ) {
$order->update_status('pending');
} else {
return;
}
}

但由于我有多个用户资料(我也销售 B2B),这对我的商店来说不切实际。我正在尝试扩展此代码段以同时检查用户角色。我在我的其他片段中使用了以下内容。是否可以将以下逻辑添加到上面的代码段中?

    $user = wp_get_current_user();
$roles = (array) $user->roles;
$roles_to_check = array('administrator', 'customer', 'shop_manager');
$compare = array_diff($roles, $roles_to_check);

if (empty($compare)){

这是我的尝试。

// WooCommerce Change Order Status BACS Pending

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

function bacs_order_payment_pending_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}

// Get an instance of the WC_Order object
$order = new WC_Order( $order_id );

$user = wp_get_current_user();
$roles = (array) $user->roles;
$roles_to_check = array('administrator', 'customer', 'shop_manager');
$compare = array_diff($roles, $roles_to_check);

if (empty($compare)){

if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ('on-hold' == $order->status ) ) {
$order->update_status('pending');
} else {
return;
}
}

最佳答案

你可以像下面这样使用,在代码中添加解释注释

function bacs_order_payment_pending_order_status( $order_id ) {
// Get $order object
$order = wc_get_order( $order_id );

// Is a WC_Order
if ( is_a( $order, 'WC_Order' ) ) {
// Get user
$user = $order->get_user();

// Roles
$roles = (array) $user->roles;

// Roles to check
$roles_to_check = array( 'administrator', 'customer', 'shop_manager' );

// Compare
$compare = array_diff( $roles, $roles_to_check );

// Result is empty
if ( empty ( $compare ) ) {
if ( $order->get_payment_method() == 'bacs' && $order->has_status( 'on-hold' ) ) {
$order->update_status( 'pending' );
}
}
}
}
add_action( 'woocommerce_thankyou', 'bacs_order_payment_pending_order_status', 10, 1 );

可能会派上用场:WooCommerce: Get Order Info (total, items, etc) From $order Object

关于php - WooCommerce 根据用户角色更改 BACS 订单状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64378539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com