【问题标题】:How can I programmatically update the _wc_average_rating meta field in WooCommerce?如何以编程方式更新 WooCommerce 中的 _wc_average_rating 元字段?
【发布时间】:2021-06-09 03:46:26
【问题描述】:

我正在构建一个具有自定义评论系统的 WooCommerce 网站。我想为多个变体但有自己的产品页面的产品显示相同的评论。

我仍然希望能够根据评级对产品进行排序,因此我想在放置自定义评论时以编程方式更新“_wc_average_rating”。丰富的数据标记也使用这些字段来填充丰富的数据标记。

我正在使用以下代码来更新元值。

update_post_meta( 13566, '_wc_review_count', 4);
update_post_meta( 13566, '_wc_rating_count', 4);
update_post_meta( 13566, '_wc_average_rating', 5.00); 

对于评论和评分计数,它工作正常,但对于平均评分,它不起作用。

我尝试了不同的方法,例如:

update_post_meta( 13566, '_wc_average_rating', 5.00); 
update_post_meta( 13566, '_wc_average_rating', 5); 
update_post_meta( 13566, '_wc_average_rating', '5.00'); 

如何更新 _wc_average_rating 元字段?有这样的功能吗?

非常感谢!

【问题讨论】:

  • “自定义”审查系统究竟意味着什么?你自己写的东西?还是一些第三方插件?您所显示的update_post_meta 调用在哪里/何时发生,会不会只是稍后覆盖
  • “不工作”是什么意思?对 update_post_meta 的调用非常简单,我看不出(根据您发布的代码)它为什么不起作用的任何原因。我的猜测是,在该字段上还有其他一些对 update_post_meta 的调用会使您的保存无效
  • 自定义评论系统确实是我自己写的。我尝试更新 wordpress 'init' 钩子中的元值。

标签: php wordpress woocommerce


【解决方案1】:

我已尝试使用以下代码来验证您的方法,并且在我的网站上它完全有效。我对产品 249 的平均评分更改为 2:

add_action( 'init', function () {
    $product = wc_get_product( 249 );
    error_log( $product->get_average_rating( 'edit' ) );
    update_post_meta( $product->get_id(), '_wc_average_rating', 2.00 );
} );

如果您查看这张图片 - 我的第一个评分将平均评分设置为 5,然后我将代码更改为 2:

所以我真的不知道您的网站有什么问题。我只能确认可以按照我向您展示的方式更新平均评分。

也许你可以告诉我你执行代码的地方。有时这可能是问题所在。

【讨论】:

  • 谢谢!会调查的。我从functions.php 运行它,就像你在那里做的一样。我想我错过了什么。
  • @LuukVanDongen 也许您的网站有某种缓存或者您需要清除瞬态?查看您使用相同方法的 WooCommerce 源代码。也许是一些看起来很奇怪的子/父配置。
【解决方案2】:

我的网站正在运行 WPML,该插件使用它自己的 2 个元字段来同步不同语言的评分/评论。元字段是:

_wcml_average_rating
_wcml_review_count

因此,要更新 WPML 网站中的评级,您需要更新所有这些字段:

update_post_meta( $product->get_id(), '_wc_review_count', $count);
update_post_meta( $product->get_id(), '_wc_rating_count', $count);
update_post_meta( $product->get_id(), '_wcml_review_count', $count);
update_post_meta( $product->get_id(), '_wcml_average_rating', $rating);
update_post_meta( $product->get_id(), '_wc_average_rating', $rating);

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2020-09-01
    • 2017-04-13
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多