diff --git a/includes/export/class-wc-product-csv-exporter.php b/includes/export/class-wc-product-csv-exporter.php index 788a83b94ca..19d568be4e9 100644 --- a/includes/export/class-wc-product-csv-exporter.php +++ b/includes/export/class-wc-product-csv-exporter.php @@ -525,8 +525,8 @@ class WC_Product_CSV_Exporter extends WC_CSV_Batch_Exporter { * Export meta data. * * @since 3.1.0 - * @param WC_Product $product - * @param array $row + * @param WC_Product $product Product being exported. + * @param array $row Row data. */ protected function prepare_meta_for_export( $product, &$row ) { if ( $this->enable_meta_export ) { @@ -537,13 +537,21 @@ class WC_Product_CSV_Exporter extends WC_CSV_Batch_Exporter { $i = 1; foreach ( $meta_data as $meta ) { - if ( ! is_scalar( $meta->value ) || in_array( $meta->key, $meta_keys_to_skip ) ) { + if ( in_array( $meta->key, $meta_keys_to_skip, true ) ) { continue; } + + // Allow 3rd parties to process the meta, e.g. to transform non-scalar values to scalar. + $meta_value = apply_filters( 'woocommerce_product_export_meta_value', $meta->value, $meta, $product, $row ); + + if ( ! is_scalar( $meta_value ) ) { + continue; + } + $column_key = 'meta:' . esc_attr( $meta->key ); $this->column_names[ $column_key ] = sprintf( __( 'Meta: %s', 'woocommerce' ), $meta->key ); - $row[ $column_key ] = $meta->value; - $i++; + $row[ $column_key ] = $meta_value; + $i ++; } } }