【问题标题】:Woocommerce issue on set programmatically sale price product以编程方式设置销售价格产品的 Woocommerce 问题
【发布时间】:2020-02-10 08:41:54
【问题描述】:

我正在使用 Woocommerce 为电子商务编写一个脚本,该脚本读取 csv 并为产品设置新的价格/销售价格。 下面的变量是一个例子。

使用此代码,我可以设置产品的价格和促销价,但是当促销数据过期时,价格不会恢复到正常价格。

$price = '40';
$sale_price = array();
$sale_price[1] = '20';
$sale_price[2] = '2020-02-10';
$sale_price[3] = '2020-02-11';

update_post_meta( $product_id, '_price', $price );
update_post_meta( $product_id, '_regular_price', $price);

if( !empty($sale_price) ){
    update_post_meta( $product_id, '_price', $sale_price[1] );
    update_post_meta( $product_id, '_sale_price', $sale_price[1] );
    update_post_meta( $product_id, '_sale_price_dates_from', $sale_price[2] );
    update_post_meta( $product_id, '_sale_price_dates_to', $sale_price[3] );
}

如果我不设置 '_price' post_meta,我将看不到正常价格或促销价。

【问题讨论】:

  • 因为您将日期用于 _sale_price_dates_from_sale_price_dates_to 日期,因为那必须是 timestamp 而不是直接日期,因此请使用 timestamp 更新并检查
  • 您好,感谢您的回答。 data_from 和 data_to 工作正常,因为我看到标签“Offer”在销售数据过期时消失
  • WooCommerce 有一个用于更新产品的 API,您应该使用它而不是直接更新帖子元数据。使用 API 可确保所有相关数据保持一致。特别是,WooCommerce 维护价格缓存,如果您直接更新数据库中的价格,WooCommerce 将不知道缓存条目现在无效并且必须刷新。
  • 您可以在woocommerce.wordpress.com/2019/04/01/…阅读有关“产品数据查找表”的信息

标签: wordpress woocommerce


【解决方案1】:

你应该这样做:

$product = wc_get_product($product_id);

$price = '40';
$sale_price = array();
$sale_price[0] = '20';
$sale_price[1] = date( 'Y-m-d 00:00:00', strtotime('2020-02-10'));
$sale_price[2] = date( 'Y-m-d 23:59:59', strtotime('2020-02-11'));

if ( !is_wp_error( $product ) ) {
    $product->set_price( $price );
    $product->set_regular_price( $price );

    if( !empty($sale_price) ){
        $product->set_price( $sale_price[0] );
        $product->set_sale_price( $sale_price[0] );
        $product->set_date_on_sale_from( $sale_price[1] );
        $product->set_date_on_sale_to( $sale_price[2] );
    }

    $product->save(); // save the product
}

【讨论】:

  • 您好,感谢您的回答!这就是我试图做的,似乎工作正常!现在我想在定时任务中设置它。希望工作没有问题!
【解决方案2】:

请尝试以下可能对您有所帮助的代码

$price = '40';
$sale_price = array();
$sale_price[1] = '20';
$sale_price[2] = strtotime('2020-02-10');
$sale_price[3] = strtotime('2020-02-11');

update_post_meta( $product_id, '_price', $price );
update_post_meta( $product_id, '_regular_price', $price);

if( !empty($sale_price) ){
    update_post_meta( $product_id, '_price', $sale_price[1] );
    update_post_meta( $product_id, '_sale_price', $sale_price[1] );
    update_post_meta( $product_id, '_sale_price_dates_from', $sale_price[2] );
    update_post_meta( $product_id, '_sale_price_dates_to', $sale_price[3] );
}

【讨论】:

  • 您好,感谢您的回答。 data_from 和 data_to 工作正常,因为我看到标签“Offer”在销售数据过期时消失
  • 不抱歉。没有 strtotime 的 data_from 和 data_to 工作正常
  • 当您从 CMS 尝试该操作并检查 woocommerce 存储到数据库的值时,您就会明白 - 检查此值 - prntscr.com/r02u9j 即使您检查 woocommerce 代码,您也可以看到这个他们正在使用strtotime - prntscr.com/r02v8m
  • 感谢您的回答。我们得到了一个解决方案,请参阅其他帖子,通过使用 CRUD 更新元而不是 update_post_meta
  • 是的,这是正确的解决方案,但我只是尝试在您的代码中修复 :)
猜你喜欢
  • 2018-07-23
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2017-06-04
  • 2011-12-11
  • 1970-01-01
  • 2017-05-23
相关资源
最近更新 更多