【发布时间】:2021-01-30 08:22:37
【问题描述】:
我收到几个订单,其中客户选择“直接银行转账”,然后他们改变主意并希望通过信用卡付款。这很烦人,因为我必须手动将订单从“保留”更改为“待付款”,这样他们就可以通过“订单”下的“我的帐户”中的“订单支付”端点用卡付款。
我一直在使用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),这对我的商店来说并不实用。我正在尝试扩展此 sn-p 以检查用户角色。我在我的其他 sn-ps 中使用了以下内容。上面的sn-p可以加上下面的逻辑吗?
$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;
}
}
【问题讨论】:
-
从 Woocommerce 3.4 版开始,有一个比一般的
woocommerce_thankyou钩子更好的专用钩子可以使用……请看下面的答案。
标签: php wordpress woocommerce orders payment-method