После последних обновлений на стороне сервиса Мой Склад номера заказов переданные с сайта через плагин стали сбивать нумерацию заказов в Мой Склад тех заказов что формируются через интерфейс Мой Склад.
Так как Мой Склад стал прибавлять 1 к заказам созданым в системе мой склад, это стало вызывать ошибку что номер заказа такой уже существует.
Ошибка сохранения объекта: нарушено ограничение
уникальности параметра ‘name
Пока есть два решения это добавлять постпрефикс, но тогда появляется следующая ошибка Мой склад начинает добавлять к заказам созданым в интерфейсе сервиса цифры.
Например вы передали с сайта заказ с номером 5
Если был добавлен префикс то номер будет выглядеть так WC5
После вы создаете заказ в системе мой склад через их интерфейс этому заказу присвоится автоматически номер WC6.
Следом с сайта вы пробуете передать заказ и у него номер 6 с префиксом WC6, такой заказ уже не пройдет вызовет ошибку которая описана выше.
Мы добавляем постпрефикс наример M, заказ получается такой WC6M, Этот заказ уже пройдет в систему.
После вы снова создаете заказ в системе мой склад через их интерфейс этому заказу присвоится автоматически номер WC6M-1.
Что тоже не всегда хорошо такие номера придется в ручную исправлять, это может повлечь за собой ошибки.
Есть второй вариант это оставить формирование номеров заказа на стороне Мой Слад, они теперь это могут.
Единственный минус что номера на сайте и в мс не будут совпадать, но информация о номере заказа передается в комментарии к заказу.
На сайте же присвоенный номер пишиться в сообщениях о заказе, а также в мета поле.
Позже добавлю код для вывода номера в отдельном метабоксе с возможностью перехода в сервис .
Пока данный подход реализован в в виде сниппета.
Данный сниппет нужно добавить в functions.php вашей темы.
//отключаем передачу номера заказа, чтобы мс присваивал свой номер
add_filter( 'wms_order_action', function( $aMsOrder ){
unset($aMsOrder['name']);
return $aMsOrder;
}
, 1000);
//Передаем номер заказа на сайте в комментарии.
add_filter('wms_order_comment_action', function( $sComment, $oOrder ){
return "Номер заказа на сайте: " . $oOrder->get_order_number() . PHP_EOL . $sComment;
}, 1000, 2);
//передача и сохранение информации о номере заказа на сайт
add_action( 'wms_customerorder_create', function( $iOrderId, $aMsOrder, $oWCOrder ){
update_post_meta($iOrderId, 'ms_order_number', $aMsOrder['name']);
$oWCOrder->add_order_note('Заказу в Мой Склад присвоен номер ' . $aMsOrder['name']);
}, 1000, 3 );
