set_sale_price in WooCommerce

时间:2019-12-02 作者:WilliamAlexander

我需要在函数中设置WooCommerce销售价格。我正在使用set\\u sale\\u price-但我认为它不起作用。

我尝试了两种不同的方法:
方法一:

    update_post_meta( $theID, \'_sale_price\', $theFinalSalePrice );
方法二:

    $editedProduct = wc_get_product( $theID );
    $editedProduct->set_sale_price($theFinalSalePrice);
方法一确实会更新销售价格-但是,据我所知,使用此方法会阻止产品“清除缓存”,因此它不会出现在shortcode中,shortcode应该显示在销售产品上。

方法二应该是正确的方法,它将导致该产品出现在短代码输出中-但是它无法实际设置\\u sale\\u价格。

因此,如果我使用方法一,并创建一个显示销售项目的手动循环,那么产品将显示在循环输出中,但不会显示在产品快捷码的输出中(on\\u sale设置为true)。如果我使用方法二,这两种方法都不会出现,因为销售价格从未设定过。

我只能假设我误解了如何正确使用set\\u sale\\u price方法。我希望有人能认识到我的错误。谢谢你的帮助。

编辑:我找到了两条可能有助于解决此问题的信息:在wc\\u product\\u meta\\u查找表中,有一个值“onsale”,该值在一个确实有销售价格但未显示在销售清单中的产品中设置为0。该值在另一个产品中设置为1,该产品确实有销售价格,并且在销售清单中显示。因此,我在第一个产品中将其设置为1,以表示,我假设,它是“onsale”

这并没有导致产品出现在销售清单中。但是,经过更多的搜索,我发现如果我delete_transient( ‘wc_products_onsale’ ); 在我的功能开始时,这个新编辑的产品确实显示在销售列表中。

因此,我似乎可以通过将每个新的onsale产品的onsale值设置为1来解决这个问题,然后delete_transient( ‘wc_products_onsale’ ); 清除销售产品的瞬态。

我唯一丢失的一点是,我不知道如何设置该值。

1 个回复
SO网友:WilliamAlexander

多亏了codeable的一位同事,我在设定销售价格后保存了产品,从而解决了这个问题:

$editedProduct->save();

就这么简单。要是我6小时前就知道那件事就好了!