我正在使用 woocommerce 预订,我需要为预订生成优惠券限制。
我所有的预订都有一小时的持续时间,客户可以使用优惠券来降低预订费用,但我需要根据预订使用当天而不是预订当天限制此优惠券的使用生成。
比如我有一张优惠券,我在周一预订了周六的房间,那么,优惠券一定不好。但是,如果我尝试在一周中的任何一天预订下周一的房间,那么优惠券一定很好。
在这种情况下,我需要限制周末的使用。
到目前为止我的代码是:
add_filter( 'woocommerce_coupon_is_valid', 'coupon_week_days_check', 10, 2);
function coupon_week_days_check( $valid, $coupon ) {
// Set HERE your coupon slug <=== <=== <=== <=== <=== <=== <=== <=== <=== <===
$coupon_code_wd = 'couponyes';
// Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Wed', 'Thu', 'Fri' ) <=== <===
$invalid_days = array( 'Sat', 'Sun');
$now_day = date ( 'D' ); // Now day in short format
// WooCommerce version compatibility
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
$coupon_code = strtolower($coupon->code); // Older than 3.0
} else {
$coupon_code = strtolower($coupon->get_code()); // 3.0+
}
// When 'xyz' is set and if is not a week day we remove coupon and we display a notice
if( $coupon_code_wd == $coupon_code && in_array($now_day, $invalid_days) ){
// if not a week day
$valid = false;
}
return $valid;
}
有什么想法吗?
在“添加到购物车”操作中提交预订“开始日期”时,您需要稍微不同的代码。所以试试这个:
// Utility function to check coupon code 'abcxxr'
function check_coupon_code( $coupon ){
// Set HERE your coupon slug
$coupon_code_wd = 'abcxxr';
$coupon_code = strtolower($coupon->get_code()); // WC 3.0+
$coupon_code_wd = strtolower($coupon_code_wd);
$found = false;
// Loop through cart items to get the chosen day and check it
foreach( WC()->cart->get_cart() as $cart_item ){
if( $coupon_code_wd == $coupon_code && isset( $cart_item['booking']['_date'] ) ){
$the_day = date('D' , strtotime($cart_item['booking']['_date']));
if( in_array( $the_day, array('Sat', 'Sun') ) ){
$found = true;
}
}
}
return $found;
}
// Coupon validity checking
add_filter( 'woocommerce_coupon_is_valid', 'coupon_week_days_check', 10, 2);
function coupon_week_days_check( $valid, $coupon ) {
if( check_coupon_code( $coupon ) ){
$valid = false;
}
return $valid;
}
// Coupon validity checking error message
add_filter('woocommerce_coupon_error', 'coupon_week_days_error_message', 10, 3);
function coupon_week_days_error_message( $err, $err_code, $coupon ) {
if( intval($err_code) === WC_COUPON::E_WC_COUPON_INVALID_FILTERED && check_coupon_code( $coupon ) ) {
$err = __( "This coupon $coupon_code_wd is valid for week days only…", "woocommerce" );
}
return $err;
}
代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效。
我使用了这个代码,我认为它有效,优惠券仅在星期四有效 但周日,客户收到了带有此优惠券和折扣的订单。 我在这段代码中没有发现错误:
add_filter( 'woocommerce_coupon_is_valid', 'coupon_week_days_check', 10, 2); 函数 coupon_week_days_check( $valid, $coupon ) {
// Set HERE your coupon slug <=== <=== <=== <=== <=== <=== <=== <=== <=== <===
$coupon_code_wd = 'xxxxx';
// Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Fri', 'Wed' and 'Thu') <=== <===
$invalid_days = array('Mon', 'Tue', 'Wed', 'Fri', 'Sat', 'Sun');
$now_day = date ( 'D' ); // Now day in short format
// WooCommerce version compatibility
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
$coupon_code = strtolower($coupon->code); // Older than 3.0
} else {
$coupon_code = strtolower($coupon->get_code()); // 3.0+
}
// When 'xyz' is set and if is not a week day we remove coupon and we display a notice
if( $coupon_code_wd == $coupon_code && in_array($now_day, $invalid_days) ){
// if not a week day
$valid = false;
}
return $valid;
}
add_filter('woocommerce_coupon_error', 'coupon_week_days_error_message', 10, 3); 函数 coupon_week_days_error_message( $err, $err_code, $coupon ) {
// Set HERE your coupon slug <=== <=== <=== <=== <=== <=== <=== <=== <=== <===
$coupon_code_wd = 'xxxxx';
// Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Wed' and 'Thu') <=== <===
$invalid_days = array('Mon', 'Tue', 'Wed', 'Fri', 'Sat', 'Sun');
$now_day = date ( 'D' ); // Now day in short format
// WooCommerce version compatibility
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
$coupon_code = strtolower($coupon->code); // Older than 3.0
} else {
$coupon_code = strtolower($coupon->get_code()); // 3.0+
}
if( $coupon_code_wd == $coupon_code && intval($err_code) === WC_COUPON::E_WC_COUPON_INVALID_FILTERED && in_array($now_day, $invalid_days) ) {
$err = __( "El Cupón $coupon_code_wd solo funciona los jueves", "woocommerce" );
}
return $err;
}
提前致谢