backend_prod_presave
Triggered before a product is saved in the new product editor. Allows changing of product properties before they are saved or returning an error message, which will interrupt the saving of a product and will show the error message to a user. If necessary, you can change the way your error messages are displayed by registering a handler for the wa_after_save event in plugin’s JavaScript code.
Shop-Script
Input (passed by reference)
$params['product'] shopProduct Object of product properties before they have been modified by saving.
$params['data'] array Product data to be saved. The data content in various product editor tabs may differ. Available by reference for modification.
$params['content_id'] string Identifier of the current product editor tab.
$params['data'] array Product data to be saved. The data content in various product editor tabs may differ. Available by reference for modification.
$params['content_id'] string Identifier of the current product editor tab.
… your plugin code …
Output
$return['errors']
Массив сообщений об ошибках.
$result['errors']['text'] string Error message text.
Shop-Script
Plugin code example
PHP
public function backendProdPreSave($params) { /** @var shopProduct $product */ $product = $params['product']; $content_id = $params['content_id']; $errors = []; if ($content_id == 'sku') { $data = $params['data']; foreach(ifset($data, 'skus', []) as $sku_id => $sku) { // Additional SKU price fields validation $price_field_id = 'myplugin_price'; if (ifset($sku, 'additional_prices', $price_field_id, 0) < 10) { $errors[] = [ 'id' => 'plugin_price_error', "name" => "product[skus][{$sku_id}][additional_prices][{$price_field_id}]", 'text' => _wp('My plugin’s price value must be equal to or greater than 10.'), 'data' => [ 'sku_id' => (int) $sku_id, 'sku_sku' => $sku['sku'], 'field_id' => $price_field_id, ], ]; } // Other additionl SKU fields validation $textarea_field_id = 'myplugin_textarea'; if (mb_strlen(ifempty($sku, 'additional_fields', $textarea_field_id, '')) < 2) { $errors[] = [ 'id' => 'plugin_field_error', "name" => "product[skus][{$sku_id}][additional_fields][{$textarea_field_id}]", 'text' => _wp('My plugin’s textarea value must be 2 or more characters long.'), 'data' => [ 'sku_id' => (int) $sku_id, 'sku_sku' => $sku['sku'], 'field_id' => $textarea_field_id, ], ]; } } } if ($content_id == 'general' || $content_id == 'sku') { $myplugin_post_values = waRequest::post('myplugin', [], waRequest::TYPE_ARRAY_TRIM); $some_field_value = ifset($myplugin_post_values, 'some_value', ''); if (!strlen($some_field_value)) { // Each error is available as an object in the event.server_errors array // in a 'wa_after_save' event handler for '#js-product-general-section' and similar elements. // You can arbitrarily use 'id', 'plugin', and 'name' values of each error in your JavaScript code // to show its message in a custom way instead of the default error block at the page bottom. // 'id' value must always be 'plugin_error' $errors[] = [ 'id' => 'plugin_error', 'plugin' => $this->id, 'name' => 'some_value_error', 'text' => _w('My plugin’s validation message.') ]; } } return [ 'errors' => $errors, ]; }