【问题标题】:Limit a WooCommerce coupon code to defined weekday only将 WooCommerce 优惠券代码限制为仅定义的工作日
【发布时间】:2024-10-29 21:00:01
【问题描述】:

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

有可能吗?我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: php wordpress woocommerce cart coupon


    【解决方案1】:

    这是一个完整的解决方案,其中包含 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+ 上测试。

    【讨论】:

    • 代码适用于限制,但是当我在周日尝试使用优惠券“xyz”并且我从您的代码中删除了“Sun”时,仍然显示“优惠券无效”的错误。
    • @LoicTheAztec;我已经尝试从代码中删除“Sun”,但我仍然面临同样的问题,因为“优惠券无效”。我也尝试过新版本和旧版本的 woocommerce,但问题是一样的。没有一张优惠券在起作用。都说“优惠券无效”。如何克服这个问题?
    • @RaviShankar 更新了我的代码! ...我只是忘记在第一个挂钩函数的末尾返回 $valid 参数(以及所有天必须以短格式(3 个字符)的大写字母开头)。那不好意思了。请再试一次它有效...
    • @LoicTheAztec;谢谢,它的工作正常。一个更复杂的问题是,那些用户只获得折扣价,其预订日和服务接受/交付日在周一至周四之间。例如:如果用户选择交货日期 21/05/2017(星期日),则优惠券不适用;如果他或她在 22/05/2017(星期一)接受服务,则优惠券适用。
    • 我已将您的代码添加到 sn-ps 并激活它以进行周一的促销活动,效果很好,谢谢,现在我如何为周二添加代码?当我复制并粘贴星期一信息并更改优惠券代码时它不起作用
    最近更新 更多