faysh
Forum Replies Created
-
В базе данных. Phpmyadmin есть?
все нормально. Сам исправил ошибку благодаря твоим заметкам()
Можешь мне показать скрин с полями из таблицы postmeta одного товара со скидочной ценой?
Все нашел. Убери все лишнее и приведи к такому виду:
if($saleprice && $saleprice != $price) $post_meta['_sale_price'] = $post_meta['_price'] = $saleprice;
Вот так – https://joxi.ru/Dr8V73FkRbBR26
Сейчас выясню в чем причина
Если заработает, то удали предыдущий (_edit_lock). Потом проверь, все ли работает.
Попробуй еще это тоже добавить:
$post_meta['_edit_last'] = '1';
Получается так – https://joxi.ru/4AkjRzSMZ4qo2q
Добавь еще это:
$post_meta['_edit_lock'] = '1470032320:1';
Попробуй добавить даты – https://joxi.ru/D2PvoeSdnbNMr3
$post_meta['_sale_price_dates_from'] = $post_meta['_sale_price_dates_to'] = '';
Если везде так, то самое просто поменять 0 на 1 в этом месте – https://joxi.ru/52aVDnFGpyq3A0
Если нет, то придется по ИД типа цены записывать нужные цены.
если пользуетесь отладкой, то замечательно. Если же не знали как, то просто переходите по адресу ваш-сайт/wc1c/exchange/?type=catalog&mode=import&filename=offers.xml Это дает вам возможность посмотреть, записалась ли цена распродажи в объект.
Теперь конкретно по задаче:
Только что провел тесты и все работает как надо. Цена успешно записывается в нужное поле
Сначала добавьте первый текст. Там только часть надо прописать. Вот эту – https://joxi.ru/1A5VkZFKLP4drE
Далее в функции wc1c_replace_offer_post_meta сделайте вывод объекта $offer и проверьте, все ли прописалось как надо, есть ли ваша цена распродажи. Если все на месте, то просто добавьте последний код, например, сюда – https://joxi.ru/nAyRgYsXKnWKrZ, как я сделал. Все должно работать как надо
Буду у компа, сам подробно напишу, что, куда поставитьв вашем случае.
У вас после добавления первой части кода, в выдаче появится объект-массив только с одной ценой — Распродажная цена
Основная цена будет и так записываться в regular_price
Добавляя вторую часть, должны получить и вторую цену уже в поле saleprice.
Скажите, без манипуляций с кодом, у вас хотя бы основная цена загружается? Плагин корректно работает?
В функцию wc1c_replace_offer_post_meta. Сколько у вас видов цен?
В вашем случае все проще:
Вторую часть кода делаете так:
$post_meta['_sale_price'] = isset($offer['Цены']['386cb545-136d-11e6-8985-001e67092268']['ЦенаЗаЕдиницу']) ? wc1c_parse_decimal($offer['Цены']['386cb545-136d-11e6-8985-001e67092268']['ЦенаЗаЕдиницу']) : '';
Естественно вместо 386cb545-136d-11e6-8985-001e67092268 нужно написать Ид цены-скидки, можно найти в offers.xml
Можно решить более просто. Отредактируйте файл 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); } }
Эти данные можно записывать в любом формате. У меня теперь все нормально выводится и синхронизируется