如何让WooCommerce默认CSV导入导出工具正确支持post_status字段
修复后完整代码
// 给CSV导入工具新增自定义字段映射 add_filter( 'woocommerce_csv_product_import_mapping_options', 'add_column_to_importer' ); function add_column_to_importer ( $options ) { $options['post_status'] = 'post_status'; return $options; } add_filter( 'woocommerce_csv_product_import_mapping_default_columns', 'add_column_to_mapping_screen' ); function add_column_to_mapping_screen ( $columns ) { $columns['post_status'] = 'post_status'; return $columns; } add_filter( 'woocommerce_product_import_pre_insert_product_object', 'process_import', 10, 2 ); function process_import( $object, $data ) { if (!empty($data['post_status'])) { // 改用WooCommerce产品官方状态设置方法,加字段过滤保证数据安全 $object->set_status( sanitize_text_field( $data['post_status'] ) ); } return $object; } // 给CSV导出工具新增自定义字段 add_filter( 'woocommerce_product_export_column_names', 'add_export_column' ); add_filter( 'woocommerce_product_export_product_default_columns', 'add_export_column' ); function add_export_column( $columns ) { $columns['post_status'] = 'post_status'; return $columns; } // 修正过滤器名称,和注册的列键post_status对应 add_filter( 'woocommerce_product_export_product_column_post_status', 'add_export_data', 10, 2 ); function add_export_data( $value, $product ) { // 传入当前导出产品的ID获取对应状态 return get_post_status( $product->get_id() ); }
原代码问题说明
- 导出钩子名称配置错误:WooCommerce导出列的数据填充钩子规则为
woocommerce_product_export_product_column_{$你注册的列键},你之前注册的列键是post_status,但用了针对custom_column的钩子,导致回调没有被触发,列自然没有数据。 - 导出状态获取逻辑错误:
get_post_status()如果不传参,默认读取的是当前全局页面的文章状态,不是你要导出的产品的状态,需要传入当前产品的ID才能拿到正确值。 - 导入状态设置方法错误:WooCommerce产品对象没有
post_status()方法,设置状态需要调用官方提供的set_status()方法才能正确写入数据库。
注:导入时填写的post_status值需要是WordPress原生的有效值,常见可选值为publish/draft/pending/private
内容的提问来源于stack exchange,提问作者aye cee
相关产品推荐
相关产品推荐

