There's a number of places in the WooCommerce codebase where the
built-in function 'round' is executed passing a non-numeric value
(not a number and not a string that can be parsed as a number),
for example round(''). In PHP 7 this yields a value of 0, but in
PHP 8 this throws an error.
This commit adds a 'NumberUtil' class with a static 'round' method,
this method checks if the passed value is numeric and if so it just
executes the built-in function, otherwise it returns 0. And all the
calls to 'round' in the codebase are replaced with 'NumberUtil::round'.
Currently there is no way to change the data fed into the importer. An example use of it is the following filter:
add_filter('woocommerce_product_import_before_process_item', "product_import_before_process_item", 10, 1);
function product_import_before_process_item($data){
//modify the data before importing e.g. prevent inserting an empty name!
foreach($data as $key => $value){
if(isset($data[$key]) && empty($value)){
unset($data[$key]);
}
}
return $data;
}
Access (read only) to params can be required in many cases when you're playing with importing.
In my case it was extending importer with filters and actions (procedural way - within original csv importer process) but it relates to objective way (extending importer class), too.
I wanted to know if 'update_existing' flag is set (other way than $_POST values) within filter 'woocommerce_product_importer_parsed_data' in parse/expand loop (called from class-wc-product-csv-importer.php 'set_parsed_data' method). Unfortunately this (and similiar) filter doesn't receive importer instance, only row data (raw, parsed and product object). Thanks to https://github.com/woocommerce/woocommerce/pull/15796 we have 'woocommerce_product_importer_formatting_callbacks' filter receiving importer instance. Unfortunately importer '$params' field is not accessible (protected in abstract). This PR resolves this simple problem - we can get this flag (and other params) before importing loops, processing rows etc.