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

发布WooCommerce新产品时如何获取完整的产品详情数据?

WooCommerce 新增产品无法触发钩子获取数据解决方案

核心问题原因

  • 你调用get_post_status()时未传入$post_id参数,默认会读取全局文章状态,新增产品场景下无法获取到当前产品的正确发布状态
  • 代码未利用save_post_product钩子自带的$update参数,该参数为false时就是首次新建产品的场景
  • WooCommerce 3.0+ 不支持直接读取$product->name属性,需要调用对应的get_name()方法否则可能报错
  • 代码存在冗余的重复获取产品对象、重复判断文章类型的逻辑

修复后可正常触发的代码

add_action( 'save_post_product',  'add_product_tocrm_through_woocommerce', 10, 3);
function add_product_tocrm_through_woocommerce($post_id, $post, $update){
    // 跳过修订版本
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }
    // 跳过未发布的状态
    if ( $post->post_status !== 'publish' ) {
        return;
    }
    // 获取产品对象,失败则终止
    if (!$product = wc_get_product( $post_id )) {
        return;
    }

    $wooProduct = [];
    $wooProduct[0]['name'] = $product->get_name();
    $wooProduct[0]['price'] = $product->get_price();
    $wooProduct[0]['description'] = $product->get_description();
    
    save_woo_product_tocrm($wooProduct);
}

代码修改说明

  • 直接用钩子传入的$post对象判断状态,无需额外调用get_post_type、get_post_status函数,避免参数错误
  • 兼容新建产品($update=false)和更新产品($update=true)两种场景,只要产品发布为公开状态就会触发执行
  • 修复了WooCommerce高版本不兼容的属性读取写法,替换为官方推荐的方法调用
  • 去掉冗余逻辑,运行效率更高
  • 如需仅首次新建发布产品时触发、更新时不触发,可在跳过修订版本的判断后新增一行if ($update) { return; }即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:54:02