Можно решить более просто. Отредактируйте файл offers.php, находится в каталоге плагина /wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange
у меня стояла задача синхронизации нескольких цен для оптовых клиентов.
В моем случае, сделал так:
Добавил сначала эти цены в выдачу. По умолчанию там только первая выводится и сохраняется в regular_price
Для этого в функции wc1c_offers_end_element_handler добавляете небольшой код:
elseif (@$names[$depth - 1] == 'Цены' && $name == 'Цена') {
if (!isset($wc1c_offer['Цена']) && (!isset($wc1c_price['ИдТипаЦены']) || $wc1c_price['ИдТипаЦены'] == $wc1c_price_type['Ид'])) $wc1c_offer['Цена'] = $wc1c_price;
elseif (isset($wc1c_price['ИдТипаЦены']) && $wc1c_price['ИдТипаЦены'] != $wc1c_price_type['Ид']) {
$wc1c_offer['Цены'][$wc1c_price['ИдТипаЦены']] = $wc1c_price;
}
}
Заметьте, добавлено только условие elseif
Далее решаем, что делать с этими новыми данными.
Поскольку для вывода оптовых цен я выбрал плагин Prices by User Role. То формат записи этих цен я подгонял под формат этого плагина.
Далее в функции wc1c_replace_offer_post_meta обрабатываем эти данные:
$prices = array(
'2aktsiya' => (isset($offer['Цены']['386cb545-136d-11e6-8985-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['386cb545-136d-11e6-8985-001e67092268']['ЦенаЗаЕдиницу']) : wc1c_parse_decimal($offer['Цена']['ЦенаЗаЕдиницу'])),
'8opt1' => (isset($offer['Цены']['2d9ee883-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['2d9ee883-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) : wc1c_parse_decimal($offer['Цена']['ЦенаЗаЕдиницу'])),
'7opt2' => (isset($offer['Цены']['2d9ee884-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['2d9ee884-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) : wc1c_parse_decimal($offer['Цена']['ЦенаЗаЕдиницу'])),
'6opt3' => (isset($offer['Цены']['2d9ee885-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['2d9ee885-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) : wc1c_parse_decimal($offer['Цена']['ЦенаЗаЕдиницу'])),
'5opt4' => (isset($offer['Цены']['2d9ee886-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['2d9ee886-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) : wc1c_parse_decimal($offer['Цена']['ЦенаЗаЕдиницу'])),
'4opt5' => (isset($offer['Цены']['2d9ee887-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['2d9ee887-f680-11e5-8ee8-001e67092268']['ЦенаЗаЕдиницу']) : wc1c_parse_decimal($offer['Цена']['ЦенаЗаЕдиницу']))
);
$post_meta['festiUserRolePrices'] = '{';
if ($prices) {
foreach ($prices as $prices_name => $prices_value) {
$post_meta['festiUserRolePrices'] .= '"'.$prices_name.'":"'.$prices_value.'",';
}
$post_meta['festiUserRolePrices'] = substr($post_meta['festiUserRolePrices'], 0, -1);
$post_meta['festiUserRolePrices'] .= '}';
$current_post_meta = get_post_meta($post_id);
foreach ($current_post_meta as $meta_key => $meta_value) {
$current_post_meta[$meta_key] = $meta_value[0];
}
foreach ($current_post_meta as $meta_key => $meta_value) {
if (array_key_exists($meta_key, $post_meta)) continue;
if($meta_key != 'festiUserRolePrices') continue;
delete_post_meta($post_id, $meta_key);
}
}
Эти данные можно записывать в любом формате. У меня теперь все нормально выводится и синхронизируется