将 WooCommerce 优惠券代码限制为仅限定义的工作日

问题描述 投票:0回答:2

我想限制优惠券代码“XYZ”仅在规定的工作日(周一至周四)使用。对于其他日子(周五至周日),它将显示错误通知。

可能吗?我怎样才能实现这一目标?

谢谢

php wordpress woocommerce cart coupon
2个回答
12
投票

这是一个完整的解决方案,其中包含 2 个挂钩函数,这些函数将限制您定义的工作日内的优惠券使用,并在优惠券无效时显示自定义错误通知。

1)检查“指定日期”优惠券有效性:

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 = 'xyz';
    // Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Wed' and 'Thu')  <===  <===
    $invalid_days = array('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;
}

2)如果无效,则显示“指定日期”优惠券的自定义错误消息:

add_filter('woocommerce_coupon_error', 'coupon_week_days_error_message', 10, 3);
function coupon_week_days_error_message( $err, $err_code, $coupon ) {

    // Set HERE your coupon slug   <===  <===  <===  <===  <===  <===  <===  <===  <===  <===  
    $coupon_code_wd = 'xyz';
    // Set HERE your defined invalid days (others: 'Mon', 'Tue', 'Wed' and 'Thu')  <===  <===
    $invalid_days = array('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 = __( "Coupon $coupon_code_wd only works on weekdays and has been removed", "woocommerce" );
    }
    return $err;
}

代码位于活动子主题(或主题)的 function.php 文件中,或者也位于任何插件文件中。

此工作代码在 WooCommerce 版本 2.6.x 和 3.0+ 上进行了测试。


0
投票

我使用数组来测试此代码来定义多个代码,但立即停止工作。 :(

© www.soinside.com 2019 - 2024. All rights reserved.