Я получаю несколько заказов, в которых клиент выбирает прямой банковский перевод, а затем передумает и хочет оплатить кредитной картой. Это очень раздражает, потому что мне нужно вручную изменить заказ с «На удержании» на «Ожидающий платеж», чтобы они могли платить картой через конечную точку оплаты заказа, которая находится в «Моя учетная запись» в разделе «Заказы».
Я использовал обработку BACS статуса изменения заказа WooCommerce для автоматического изменения статус заказа с "На удержании" на "Ожидающий платеж".
// 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;
}
}
woocommerce_thankyou
крючок… Пожалуйста, прочтите ответ ниже. - person LoicTheAztec   schedule 15.10.2020