You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce可变产品更新时如何获取历史价格用于对比?

WooCommerce可变产品更新时获取新旧价格的解决方案

问题描述

在WooCommerce中管理可变产品时,需要在更新价格的同时获取新旧价格进行对比,但现有的woocommerce_admin_process_variation_object、woocommerce_before_save_product_variation等钩子仅能获取新价格,无法直接拿到历史价格。修改核心文件虽能实现,但不符合开发规范,因此需要合规的解决方案。已尝试过woocommerce_update_product_variation、woocommerce_before_save_product_variation、wp_ajax_woocommerce_remove_variations、woocommerce_save_product_variation等钩子,均未达到需求。

可行解决方案

方法一:利用woocommerce_before_save_product_variation钩子读取数据库原始价格

在变体保存前,直接从数据库中读取未修改的旧价格,再与即将保存的新价格对比:

add_action('woocommerce_before_save_product_variation', 'compare_variation_prices_before_save', 10, 2);
function compare_variation_prices_before_save($variation, $product) {
    // 获取数据库中存储的旧价格
    $old_price = get_post_meta($variation->get_id(), '_price', true);
    // 获取当前待保存的新价格
    $new_price = $variation->get_price();

    // 执行新旧价格对比逻辑
    if ($old_price !== $new_price && !empty($new_price)) {
        // 示例:记录价格变更日志
        error_log("变体ID {$variation->get_id()} 价格更新:旧价 {$old_price} → 新价 {$new_price}");
        // 这里可以添加自定义业务逻辑,比如发送通知、记录到自定义表等
    }
}

方法二:通过wp_update_post钩子捕获变体更新前的原始数据

产品变体属于自定义文章类型,可借助WordPress原生的wp_update_post钩子,在更新触发时获取旧价格:

add_action('wp_update_post', 'compare_variation_prices_on_update', 10, 2);
function compare_variation_prices_on_update($post_id, $post_before) {
    // 验证当前更新的是产品变体
    if (get_post_type($post_id) !== 'product_variation') {
        return;
    }

    // 获取旧价格
    $old_price = get_post_meta($post_id, '_price', true);
    // 从POST数据中获取待保存的新价格(需做安全过滤)
    $new_price = isset($_POST['_price']) ? wc_clean($_POST['_price']) : '';

    if ($old_price !== $new_price && !empty($new_price)) {
        // 执行对比逻辑
        error_log("变体ID {$post_id} 价格变更:旧价 {$old_price} → 新价 {$new_price}");
    }
}

注意事项

  • 两种方法均无需修改WooCommerce核心文件,符合官方开发规范
  • 使用$_POST获取新价格时,必须用wc_clean()进行安全过滤,避免恶意数据注入
  • 若需处理批量更新场景,需确保逻辑能兼容批量操作的参数传递

内容的提问来源于stack exchange,提问作者wprah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:47:22