Настройка статуса заказа по умолчанию в Woocommerce Gateway - PullRequest
1 голос
/ 03 октября 2019

Я использовал следующий код, который отлично работает, он делает состояние всех заказов по умолчанию приостановленным.

/**
 * Auto Complete all WooCommerce orders.
 */
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) {
        return;
    }

    $order = wc_get_order( $order_id );
    $order->update_status( 'on-hold' );
}

Но мне нужно совместить это с адресом доставки / выставления счета. т.е. выполнить этот код только , если адрес доставки или платежный адрес НЕ ВЕЛИКОБРИТАНИЯ или Франция. Клиенты из всех других стран будут переведены в режим ожидания согласно этому коду, в то время как заказы в Великобритании и Франции получат статус заказа по умолчанию, установленный настройками платежного маршрута.

Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 03 октября 2019

Попробуйте исключить из Франции и Великобритании страны выставления счетов и доставки:

add_action( 'woocommerce_thankyou', 'country_based_auto_on_hold_orders' );
function country_based_auto_on_hold_orders( $order_id ) { 
    if ( ! $order_id ) {
        return;
    }

    $order = wc_get_order( $order_id );

    if ( ! ( in_array( $order->get_billing_country(), ['UK', 'FR'] ) || in_array( $order->get_shipping_country(), ['UK', 'FR'] ) ) ) {
        $order->update_status( 'on-hold' );
    }
}

Теперь, используя woocommerce_thankyou крюк, - это старый способ . Чтобы избегать множественных уведомлений по электронной почте об изменениях статуса, используйте вместо этого следующее:

Для все платежные шлюзы , кроме наложенного платежа (COD):

add_action( 'woocommerce_payment_complete_order_status', 'wc_auto_on_old_paid_order', 10, 3 );
function wc_auto_on_old_paid_order( $status, $order_id, $order ) {
    if ( ! ( in_array( $order->get_billing_country(), ['UK', 'FR'] ) || in_array( $order->get_shipping_country(), ['UK', 'FR'] ) ) ) {
        $status = 'on-hold'
    }
    return $status;
}

Для Оплата наложенным платежом (COD) платежей:

add_action( 'woocommerce_cod_process_payment_order_status', 'wc_auto_complete_cod_order', 10, 2 );
function wc_auto_complete_cod_order( $status, $order ) {
    if ( ! ( in_array( $order->get_billing_country(), ['UK', 'FR'] ) || in_array( $order->get_shipping_country(), ['UK', 'FR'] ) ) ) {
        $status = 'on-hold'
    }
    return $status;
}

Похожие: WooCommerce: автоматическое заполнение оплаченных заказов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...