首页 > 解决方案 > 以编程方式设置销售价格产品的 Woocommerce 问题

问题描述

我正在为 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,我看不到正常价格或销售价格。

标签: wordpresswoocommerce

解决方案


你应该这样做:

$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
}

推荐阅读