Wordpress 以编程方式设置产品销售价格的商业问题

Wordpress 以编程方式设置产品销售价格的商业问题,wordpress,woocommerce,Wordpress,Woocommerce,我正在为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_

我正在为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] );
}

如果我没有设置“\u price”post\u meta,我就看不到正常价格或销售价格。

请尝试下面的代码,这可能会对您有所帮助

$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] );
}

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

$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] );
}

你应该这样做:

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

你应该这样做:

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


因为您使用的日期是从&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&。来自和数据可以正常工作,因为我看到销售数据过期时标签会消失。WooCommerce有一个用于更新产品的API,您应该使用它,而不是直接更新post meta。使用API可确保所有相关数据的一致性。特别地,WooCommerce为价格维护缓存,如果您直接更新数据库中的价格,WooCommerce将不知道缓存条目现在无效,必须刷新。您可以在上阅读产品数据查找表,因为您使用的是从日期到日期的日期,因为该日期必须是时间戳而不是直接日期所以用时间戳更新并检查Hi,谢谢你的回答。来自和数据可以正常工作,因为我看到销售数据过期时标签会消失。WooCommerce有一个用于更新产品的API,您应该使用它,而不是直接更新post meta。使用API可确保所有相关数据的一致性。特别是,WooCommerce维护价格缓存,如果您直接更新数据库中的价格,WooCommerce将不知道缓存条目现在无效,必须刷新。您可以在Hi阅读有关产品数据查找表的信息,谢谢您的回答。来自和数据工作正常,因为我看到标签报价在销售数据过期时消失。不,对不起。当您尝试使用CMS中的数据并检查woocommerce存储到数据库中的值时,您将了解-检查这些值-即使您检查woocommerce代码,您也可以看到他们正在使用StrotTime-感谢您的回答。我们得到了一个解决方案,请参阅其他帖子,通过使用CRUD更新meta而不是update_post_metaYes这是正确的解决方案,但我只是尝试在您的代码中进行修复:嗨,谢谢您的回答。来自和数据工作正常,因为我看到标签报价在销售数据过期时消失。不,对不起。当您尝试使用CMS中的数据并检查woocommerce存储到数据库中的值时,您将了解-检查这些值-即使您检查woocommerce代码,您也可以看到他们正在使用StrotTime-感谢您的回答。我们得到了一个解决方案,请参阅其他帖子,使用CRUD更新元而不是更新元。是的,这是正确的解决方案,但我只是尝试在您的代码中进行修复:嗨,谢谢您的回答!这就是我一直在努力做的,而且似乎效果很好!现在,我尝试在一个定时任务中设置它。希望工作没有问题!嗨,谢谢你的回答!这就是我一直在努力做的,而且似乎效果很好!现在,我尝试在一个定时任务中设置它。希望工作没有问题!