【问题标题】:Sell specific Woocommerce items on a specific day and others on a time range在特定日期销售特定 Woocommerce 商品,在特定时间范围内销售其他商品
【发布时间】:2019-08-27 07:28:03
【问题描述】:

我之前问过是否可以限制特定物品只能在周日购买,并且 "Sell some products only on a specific day in WooCommerce" 提供的答案代码效果很好......

我现在有一些可以在任何一天购买的物品,但只能在伦敦时间下午 12:00 到 2.30 之间购买。

您能帮忙修改以前的代码以允许这样做吗?

注意:我仍然想运行 LoicTheAztec 之前的代码,因为某些项目仍然仅限于周日。

【问题讨论】:

    标签: php wordpress time woocommerce days


    【解决方案1】:

    以下代码将允许在周日购买特定物品,并在时间范围内(12h 到 14h30)购买特定物品。

    这是这2个答案代码的组合:

    代码如下:

    // The "sunday" products (setting your product IDS in the array)
    function sunday_products() {
        // HERE your product IDs in the array (need to be coma separated)
        return array( 37 );
    }
    
    // The 12h to 14h30 products (setting your product IDS in the array)
    function time_range_products() {
        // HERE your product IDs in the array (need to be coma separated)
        return array( 53, 57 );
    }
    
    // Utility conditional function that check if day is sunday (returns boolean)
    function is_sunday() {
        // Set Your shop time zone (http://php.net/manual/en/timezones.php)
        date_default_timezone_set('Europe/London');
    
        // If the current day is "sunday" return true (else retun false)
        return ( date('w') == 0 ) ? true : false;
    }
    
    // Utility conditional funtion for open hours (returns boolean true when store is open)
    function in_time_range() {
        // Set Your shop time zone (http://php.net/manual/en/timezones.php)
        date_default_timezone_set('Europe/London');
    
        // Below your shop time and dates settings
        $open_time = mktime('12', '00', '00', date('m'), date('d'), date('Y')); // 12:00:00
        $end_time  = mktime('14', '30', '00', date('m'), date('d'), date('Y')); // 14:30:00
        $now       = time(); // Current timestamp in seconds
    
        return ( $now >= $start_time && $now <= $end_time ) ? true : false;
    }
    
    
    // Enable purchases for specific items on sundays only
    add_filter( 'woocommerce_variation_is_purchasable', 'enable_specific_products_on_sundays', 10, 2 );
    add_filter( 'woocommerce_is_purchasable', 'enable_specific_products_on_sundays', 10, 2 );
    function enable_specific_products_on_sundays( $purchasable, $product ) {
        // Enable purchases for specific defined item only on sunday
        if( ! is_sunday() && in_array( $product->get_id(), sunday_products() ) )
            $purchasable = false;
    
        // Enable purchases for specific defined item only from 12h to 14h30
        if( ! in_time_range() && in_array( $product->get_id(), time_range_products() ) )
            $purchasable = false;
    
        return $purchasable;
    }
    
    // Add a notice in specific products outside sundays
    add_action( 'woocommerce_before_single_product', 'filter_before_single_product' );
    function filter_before_single_product() {
        global $product;
    
        // For sundays product
        if( ! is_sunday() && in_array( $product->get_id(), sunday_products() ) ) {
            wc_print_notice( __( 'This product is only purchasable on sundays', 'woocommerce' ), 'error' );
        } 
        // For hour range product
        elseif( ! in_time_range() && in_array( $product->get_id(), time_range_products() ) ) {
            wc_print_notice( __( 'This product is only purchasable between 12 AM and 2h30 PM', 'woocommerce' ), 'error' );
        }
    }
    
    // IN CASE OF (but not needed): Cart and checkout validation + error message
    add_action( 'woocommerce_check_cart_items', 'conditionally_allowing_checkout' );
    add_action( 'woocommerce_checkout_process', 'conditionally_allowing_checkout' );
    function conditionally_allowing_checkout() {
        // Loop through cart items
        foreach( WC()->cart->get_cart() as $cart_item ){
            // Check cart items
            if( ! is_sunday() && in_array( $cart_item['data']->get_id(), sunday_products() ) ){
                wc_add_notice( sprintf(__("%s can be only purchase on sundays.", "woocommerce"), $cart_item['data']->get_name() ), 'error' );
                break;
            }
            else if( ! in_time_range() && in_array( $cart_item['data']->get_id(), time_range_products() ) ){
                wc_add_notice( sprintf(__("%s can be only purchase between 12 AM and 2h30 PM.", "woocommerce"), $cart_item['data']->get_name() ), 'error' );
                break;
            }
        }
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 2012-05-17
      • 2021-07-10
      相关资源
      最近更新 更多