如何根据自定义字段值自动设置WooCommerce产品配送类别
原代码存在的3个核心问题
- 执行顺序错误:调用
$product->get_meta()时还未初始化$product对象,需要先通过wc_get_product()获取产品实例再读取自定义字段 - 条件判断语法错误:
if ($title = 'Trenta')是赋值操作,不是相等判断,应该使用==或者===做值比对 - 变量未定义风险:如果自定义字段值不等于
Trenta,$shipping_class_id未初始化,会触发PHP警告,甚至错误清空产品原有配送类别
修正后可直接使用的代码
function woo_on_product_save( $post_id ) { // 先获取产品对象,校验有效性 $product = wc_get_product( $post_id ); if ( !$product ) return; // 读取自定义字段值 $title = $product->get_meta( 'meta_easyfatt_libero_1' ); // 默认保留原有配送类配置,避免不符合条件时清空已有设置 $shipping_class_id = $product->get_shipping_class_id(); // 相等判断使用双等号,需要严格比对值和类型可替换为三等号=== if ( $title == 'Trenta' ) { $shipping_class_id = 1182; } $product->set_shipping_class_id( $shipping_class_id ); $product->save(); } add_action( 'woocommerce_process_product_meta', 'woo_on_product_save', 100 );
如果业务要求匹配不到指定值时清空配送类,把$shipping_class_id的默认值改成0即可。
内容的提问来源于stack exchange,提问作者Deegita
相关产品推荐
相关产品推荐

