根据Woocommerce中的自定义字段有条件地设置产品销售价格

时间:2018-05-22 22:43:45

标签: php wordpress date woocommerce price

在Woocommerce中,我在我的产品中设置了两个自定义字段:

  1. iadi_price以定制销售价格。
  2. iadi_date了解自定义日期。
  3. 如果指定日期与今天之间的时间少于3天,我想更新销售价格。

    我写了以下代码:

    function fiyatidegistir() {
    global $product;
    $bugun = time();
    $yenifiyat = get_post_meta($product->ID, 'iadi_price', true); //new sale price
    $kgn = get_post_meta($product->ID, 'iadi_date', true); // date
    if(!empty($kgn)) {
        $kalan = $kgn - $bugun;
        $dakika = $kalan / 60;
        $saat = $dakika / 60;
        $gun = $saat / 24;
        $yil = floor($gun/365);
        $gun_farki = floor($gun - (floor($yil) * 365));
        if($gun_farki<4 && !empty($yenifiyat)) {
            update_post_meta($product->ID, '_price', $yenifiyat);
        }
    }
    }
    add_action( 'woocommerce_before_main_content', 'fiyatidegistir'); 
    

    但它不起作用,没有任何反应。

    我做错了什么?如何根据所解释的价格和日期自定义字段以编程方式更改产品销售价格?

2 个答案:

答案 0 :(得分:1)

这样做不是一个好主意:

  • 如何管理已更新的产品,以避免多次连续更新价格。
  • 使用这种方式,它会杀死你的网站(对很多进程)
  • 当您更新有效价格时,您的产品将不会出售
  • 期间结束后,您将无法恢复到初始价格。

此外,您的代码在Woocommerce中有关WC_Products的错误以及有关日期计算的错误。最后,当您编写代码时,最好用英语命名变量和函数,用英语对代码进行注释,因为任何人都可以理解它。

请尝试使用以下适用于简单产品的产品,在条件匹配时显示相关产品的销售价格(日期和自定义价格):

add_filter( 'woocommerce_product_get_price', 'conditional_product_sale_price', 20, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 20, 2 );
function conditional_product_sale_price( $price, $product ) {
    if( is_admin() ) return $price;

    $new_price = get_post_meta( $product->get_id(), 'iadi_price', true ); //new sale price
    $date      = get_post_meta( $product->get_id(), 'iadi_date', true ); // date

    if( ! empty($date) && ! empty($new_price) ) {
        $date_time      = (int) strtotime($date); // Convert date in time
        $now_time       = (int) strtotime("now"); // Now time in seconds
        $one_day        = 86400; // One day in seconds

        // Calculate the remaining days
        $remaining_days = floor( ( $date_time - $now_time ) / $one_day );

        if( $remaining_days >= 0 && $remaining_days < 4  )
            $price = $new_price;
    }
    return $price;
}

代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。

enter image description here

答案 1 :(得分:0)

如果您是为了使其能够与变体一起使用,则需要以下所有过滤器:

add_filter( 'woocommerce_product_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_variation_prices_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_variation_prices_sale_price', 'conditional_product_sale_price', 10, 2 );

并且由于存储的瞬态,您需要确保已更改 woocommerce_get_variation_prices_hash

您可能会发现我为客户创建的要点很有用

https://www.rent-a-ninja.org/programming/wordpress-plugin-entwickler-naehe-graz/woocommerce-custom-sale-price-for-custom-role/