在 WooCommerce 中为定义的 $product 或 $variation 对象重新生成瞬态
Posted
技术标签:
【中文标题】在 WooCommerce 中为定义的 $product 或 $variation 对象重新生成瞬态【英文标题】:Regenerate transients for defined $product or $variation Objects in WooCommerce 【发布时间】:2020-12-08 11:59:13 【问题描述】:我真的想知道是否有办法为给定的产品或变体对象重新生成所有本机瞬变。
我在显示动态价格的情况下,一切都很好。但我需要更新像wc_prices_id
这样的瞬态,以便它考虑到这个新的自定义价格。如果没有,第一个页面加载很糟糕(尤其是在一次显示多个产品的商店页面上)。
我正在连接到woocommerce_product_variation_get_price
、woocommerce_product_variation_get_regular_price
、woocommerce_variation_prices_price
和 woocommerce_variation_prices_regular_price
(简而言之,此修改会即时修改页面的每一个价格,如果它是包含子项的父项,它也会更改子项的价格以计算父项的范围价格(最小值/最大值)。
在深入研究 Woocommerce 代码时,我发现哪种方法会生成瞬态价格:它是位于 wp-content/plugins/woocommerce/includes/data-stores/class-wc-product-variable-data-store-cpt.php
中的 read_price_data()
。但我找不到将其称为我的 Cron Job 脚本的方法,以便在产品或变体对象上调用它。
你们知道这个任务的解决方案吗?
亲切的问候。
【问题讨论】:
【参考方案1】:变量缓存价格中涉及的 3 个过滤器挂钩是:
woocommerce_variation_prices_price
woocommerce_variation_prices_regular_price
woocommerce_variation_prices_sale_price
要重新生成缓存的价格,您可以使用这些钩子:
wc_delete_product_transients( $variation->get_id() );
但它会降低您网站的性能。
自 Woocommerce 3 以来引入,
woocommerce_get_variation_prices_hash
过滤器挂钩将允许以更有效的方式刷新缓存价格的变化,而无需在触发这些挂钩时删除相关的瞬态。
文档和相关线程:
Caching and dynamic pricing – upcoming changes to the get_variation_prices method Change product prices via a hook in WooCommerce 3 All related threads usingwoocommerce_get_variation_prices_hash
filter hook
【讨论】:
以上是关于在 WooCommerce 中为定义的 $product 或 $variation 对象重新生成瞬态的主要内容,如果未能解决你的问题,请参考以下文章
如何在 WooCommerce 中为自定义产品类型启用价格和库存
在 WooCommerce 中为特定产品类别自定义“添加到购物车”按钮
在Woocommerce中为特定产品类别使用自定义单一产品模板