无法通过编程方式将WooCommerce产品设置为精选商品
WooCommerce批量创建产品无法设置为精选状态的解决方法
问题根源
你代码中通过更新_featured自定义字段设置产品精选状态的逻辑仅适用于WooCommerce 3.0之前的旧版本。WooCommerce 3.0及以上版本调整了产品属性存储规则,产品精选状态现已改为通过product_visibility分类法下的featured术语关联实现,直接修改自定义字段不会生效。
解决方案
推荐使用WooCommerce官方提供的CRUD操作类实现,兼容性最好,不会因版本更新失效:
在wp_insert_post获取到产品ID后,删除原有update_post_meta($post_id, '_featured', "true");代码,替换为以下内容:
// 初始化产品对象 $product = wc_get_product($post_id); if ($product) { // 设置为精选产品 $product->set_featured(true); // 保存修改 $product->save(); }
修改后完整可用代码
<?php $product_array = array( "post_title" => $pro_data['value'][$i]['Website_x0020_Title'], "post_content" => $pro_data['value'][$i]['Parcel_x0020_Description'], "post_status" => "publish", "post_type" => "product" ); $post_id = wp_insert_post($product_array); update_post_meta($post_id, '_price', $pro_data['value'][$i]['Cash_x0020_Price'] ); update_post_meta($post_id, "_manage_stock", "yes"); // 替换原有设置精选的代码,改用官方CRUD方法 $product = wc_get_product($post_id); if ($product) { $product->set_featured(true); $product->save(); } if($pro_data['value'][$i]['Stock_x0020_Number'] == 0){ update_post_meta($post_id, '_stock', $pro_data['value'][$i]['Stock_x0020_Number']); update_post_meta($post_id, '_stock_status', 'outofstock' ); } else { update_post_meta($post_id, '_stock', $pro_data['value'][$i]['Stock_x0020_Number']); update_post_meta($post_id, '_stock_status', 'instock' ); } update_field('down_payment', $pro_data['value'][$i]['Web_Deposit'], $post_id); update_field('purchase_price_main', $pro_data['value'][$i]['Website_x0020_Purchase_x0020_Pri'], $post_id); ?>
替代方案(手动关联术语)
如果你不想使用CRUD类,也可以直接操作分类关联实现,效果一致:
wp_set_object_terms( $post_id, 'featured', 'product_visibility', true );
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

