我使用了下面的代码,效果很好,它使所有订单的默认状态都保持不变。
/**
* 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的设置设置的默认订单状态。
任何帮助将不胜感激。
答案 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;
}