在 WooCommerce 中的特定日期提供免费送货服务

Make free shipping available on specific days of the week in WooCommerce

我正在寻找一种方法,可以根据订单的工作日为所有订单提供免费送货服务。因此,如果有人下订单(假设是星期一),无论是什么类型的订单,他都会免费送货 quantity/amount/etc.

我试图从其他不同的教程中获取一些东西,但我似乎无法理解我更改 free_shipping 限制的部分 + 不确定它是否有效,因为它不完整。

function free_shipping_day( $rates, $package ) {

// valid days
$valid_days = array('Mon');

// current day
$today = date ( 'D' );

// check if it's valid day
if( in_array($today, $valid_day) ){
    // clear other shipping methods allow only free
    foreach ( $rates as $rate_id => $rate ) {
        if ( 'free_shipping' === $rate->method_id ) {
            $free[ $rate_id ] = $rate;

        }

    }

    // set free_shipping limit to 0


    // show notice
    wc_add_notice( __( "Shipping is free today!" ), 'notice');
}
}

add_action('woocommerce_package_rates', 'free_shipping_day');

非常感谢任何帮助,因为我有点受困于此。

在您的活动主题中添加以下代码片段functions.php -

function enable_free_shipping_for_days( $rates ) {
    $free = array();
    // valid days
    $valid_days = array('Mon');
    if( !in_array( date('D'), $valid_days ) ) return $rates;

    foreach ( $rates as $rate_id => $rate ) {
        if ( 'free_shipping' !== $rate->method_id ) continue;
        $free[ $rate_id ] = $rate;
    }
    if( $free ) wc_add_notice( __( "Shipping is free today!" ), 'notice');
    return ( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'enable_free_shipping_for_days', 99 );

要在一周中的特定日子提供免费送货,需要不同的挂钩绕过 免费送货限制 (如果存在)

我们将 date() 函数与 "w" 参数一起使用,该参数给出来自 0 的整数(星期日)到6(星期六):

// Enable free shipping on specific days of the week
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'enable_free_shipping_for_specific_week_days', 10, 3 );
function enable_free_shipping_for_specific_week_days( $is_available, $package, $shipping_method ) {
    // Free shipping is available on mondays and wednesdays for example
    if( in_array( date('w'), [ 1, 3 ] ) ) {
        return true;
    }
    return $is_available;
}

要在提供免费送货服务时隐藏其他送货方式,您还可以使用以下方法:

// Hide other shipping methods when free shipping is available
add_filter( 'woocommerce_package_rates', 'hide_other_shipping_methods_when_free_shipping_is_available', 100, 2 );
function hide_other_shipping_methods_when_free_shipping_is_available( $rates, $package ) {
    $free = array();

    foreach ( $rates as $rate_id => $rate ) {
        if ( 'free_shipping' === $rate->method_id ) {
            $free[ $rate_id ] = $rate;
            break;
        }
    }
    return ! empty( $free ) ? $free : $rates;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。