Woocommerce Gateway默认订单状态自定义

时间:2019-10-03 11:41:06

标签: php wordpress woocommerce hook-woocommerce orders

我使用了下面的代码,效果很好,它使所有订单的默认状态都保持不变。

/**
 * 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' );
}

但是我需要将此与送货/账单地址结合起来。也就是说,如果订单的送货地址或账单地址不是英国或法国,则仅执行此代码 。来自所有其他国家/地区的客户将按照此代码被保留,而英国和法国的订单将获得由付款geteway的设置设置的默认订单状态。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

请尝试以下操作以排除法国和英国的结算和运送国家/地区:

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: Auto complete paid orders

相关问题