在 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 文件。已测试并有效。
我正在寻找一种方法,可以根据订单的工作日为所有订单提供免费送货服务。因此,如果有人下订单(假设是星期一),无论是什么类型的订单,他都会免费送货 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 文件。已测试并有效。