根据Woocommerce的每日时间范围对特定产品进行折扣

时间:2018-10-27 17:35:05

标签: php wordpress time woocommerce discount

我试图在我的WooCommerce网站上举办“特别午餐”每日活动。这意味着从11:00至15:00,由于“每日特别午餐”活动,特定产品将打折。

我希望“特殊午餐”活动在每周的每一天都发生。

这怎么实现?

我在网上搜索了此内容,但只发现了每天都会限制项目的插件,而不是在特定时间段内。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

下面的代码将在每天的11h到15h00之间对选定的产品ID进行价格折扣(根据正常价格计算出销售价格)

您将必须设置:

  • 正确的时区(找到您的in here
  • 要应用的折扣率
  • 每日开始和结束时间
  • 此期间每天要打折的相关产品ID的数组

代码:

// Utility function that gives the discount daily period and the discount rate
function get_discount_period_rate(){
    // Set the correct time zone  (http://php.net/manual/en/timezones.php)
    date_default_timezone_set('Europe/Paris');

    // Set the discount rate
    $rate = 0.8; // <== 20 %

    // Set the start time and the end time
    $start_time = mktime( 11, 00, 00, date("m")  , date("d"), date("Y") );
    $end_time   = mktime( 15, 00, 00, date("m")  , date("d"), date("Y") );
    $time_now   = strtotime("now");

    // Return the rate during allowed discount the period or false outside the period
    return $start_time <= $time_now && $end_time > $time_now ? $rate : false;
}

// Enable calculated on sale price from the regular price and the rate
add_filter( 'woocommerce_product_variation_get_sale_price', 'periodic_discount_prices', 99, 3 );
add_filter( 'woocommerce_product_variation_get_price', 'periodic_discount_prices', 99, 3 );
add_filter( 'woocommerce_variation_prices_sale_price', 'periodic_discount_prices', 99, 3 );
add_filter( 'woocommerce_variation_prices_price', 'periodic_discount_prices', 99, 3 );
add_filter( 'woocommerce_product_get_sale_price', 'periodic_discount_prices', 99, 3 );
add_filter( 'woocommerce_product_get_price', 'periodic_discount_prices', 99, 3 );
function periodic_discount_prices( $price, $product, $parent = 0 ){
    // Set the product Ids that will be discounted
    $discounted_products = array( 37, 41, 53 );

    if( get_discount_period_rate() && in_array( $product->get_id(), $discounted_products ) ){
        $price = $product->get_regular_price() * get_discount_period_rate();
    }
    return $price;
}

// Handling variation prices caching
add_filter( 'woocommerce_get_variation_prices_hash', 'add_rate_to_variation_prices_hash', 99, 1 );
function add_rate_to_variation_prices_hash( $hash ) {
    if( get_discount_period_rate() )
        $hash[] = get_discount_period_rate();
    return $hash;
}

代码进入活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。