dragomagic
Forum Replies Created
-
Если надо выгружать и туда, и туда, то:
$post_content = $post_excerpt; $post_excerpt = '';
меняем
$post_content = $post_excerpt; $post_excerpt = $post_excerpt;
Правьте файл import.php в самом начале файла есть условие:
define(‘WC1C_PRODUCT_DESCRIPTION_TO_CONTENT’, false);
измените значение false на trueВторой вариант (если не поможет) более вульгарный.
Правим в том же файле функциюfunction wc1c_replace_post(...
Вот как сейчас выглядит исправленный кусок кода:function wc1c_replace_post($guid, $post_type, $is_deleted, $is_draft, $post_title, $post_name, $post_excerpt, $post_content, $post_meta, $category_taxonomy, $category_guids, $preserve_fields) { $post_id = wc1c_post_id_by_meta('_wc1c_guid', $guid); if (!$post_excerpt) $post_excerpt = ''; /* !!! CHANGED !!! */ // if (WC1C_PRODUCT_DESCRIPTION_TO_CONTENT) { $post_content = $post_excerpt; $post_excerpt = ''; // } $args = compact('post_type', 'post_title', 'post_excerpt', 'post_content');
и дальше без изменений. То есть, мы игнорируем проверку условия и в любом случае записуем полное описание.
Примечание: в таком случае анонс будет пустой.
Только руки опять дошли до этой проблемы – получилось “победить”.
Сама проблема связанна с внутренними функциями Ворпресса.Есть 2 варианта решения проблемы:
Вариант 1.
Плюсы: просто
Минусы: не будет срабатывать обновление названия категории (а может и еще что-то дополнительно ?? ).
Реализация:
В файле import.php находим функцию function wc1c_replace_term($is_full, $guid, $parent_guid, $name, $taxonomy, $order, $use_guid_as_slug = false)
в этой функции необходимо закомментировать 2 строчки в условии “if (empty($is_added)) {”Было:
if (empty($is_added)) { if (trim($name) != $term->name) $name = wc1c_unique_term_name($name, $taxonomy, $parent); $parent = $parent_guid ? wc1c_term_id_by_meta('wc1c_guid', "$taxonomy::$parent_guid") : null; $args = array( 'name' => $name, 'parent' => $parent, ); $result = wp_update_term($term_id, $taxonomy, $args); wc1c_check_wp_error($result); }
Стало:
if (empty($is_added)) { if (trim($name) != $term->name) $name = wc1c_unique_term_name($name, $taxonomy, $parent); $parent = $parent_guid ? wc1c_term_id_by_meta('wc1c_guid', "$taxonomy::$parent_guid") : null; $args = array( 'name' => $name, 'parent' => $parent, ); //$result = wp_update_term($term_id, $taxonomy, $args); //wc1c_check_wp_error($result); }
Вариант 2.
Плюсы: работает обновление категорий для синхронизации
Минусы: появляется “дыра” в движке вордпресса и после обновления необходимо заново воспроизводить данные манипуляции.
Реализация: в файле wp_includes/taxonomy.php необходимо закомментировать все строчки “$args = sanitize_term($args, $taxonomy, ‘db’);” – для версии 4.5.х их 2шт.и каким образом решается проблема?
Проверьте пути и вообще наличие файлов для импорта, т.к. скрипт ругается на то, что нужного файла / директории не существует.
Файл с данными для импорта должен находится в данной директории
uploads/woocommerce-1c/catalog/
а у вас его там видимо нетНе удается отредактировать сообщение, поэтому еще раз привожу формат для 1С:
<Товары> <Товар> <Ид>34198bce-338c-11e6-bd42-080027004cfa</Ид> <Артикул>30254</Артикул> <Наименование>Втулка редукционная (КН-КВ) 1 1/2"x1 1/4" </Наименование> <БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница> <ЗначениеВариации>{"EUR":"39.40"}</ЗначениеВариации> <ВариацияВалюты>EUR</ВариацияВалюты> <Группы> <Ид>34198bd0-338c-11e6-bd42-080027004cfa</Ид> </Группы>
И пожалуй последнее примечание)
Если не требуется, что бы на товар становилась цена, которая подтягивается из файла offers, то правим файл offers.php, добавляя в него пару строк (155).
Было:if (!is_null($price)) { $sale_price = @$current_post_meta['_sale_price']; $sale_price_from = @$current_post_meta['_sale_price_dates_from']; $sale_price_to = @$current_post_meta['_sale_price_dates_to']; if (empty($current_post_meta['_sale_price'])) { $post_meta['_price'] = $price; } else { if (empty($sale_price_from) && empty($sale_price_to)) { $post_meta['_price'] = $current_post_meta['_sale_price']; } else { $now = strtotime('now', current_time('timestamp')); if (!empty($sale_price_from) && strtotime($sale_price_from) < $now) { $post_meta['_price'] = $current_post_meta['_sale_price']; } if (!empty($sale_price_to) && strtotime($sale_price_to) < $now) { $post_meta['_price'] = $price; $post_meta['_sale_price_dates_from'] = ''; $post_meta['_sale_price_dates_to'] = ''; } } } }
Стало:
if (!is_null($price)) { $sale_price = @$current_post_meta['_sale_price']; $sale_price_from = @$current_post_meta['_sale_price_dates_from']; $sale_price_to = @$current_post_meta['_sale_price_dates_to']; if (empty($current_post_meta['_sale_price'])) { $post_meta['_price'] = $price; } else { if (empty($sale_price_from) && empty($sale_price_to)) { $post_meta['_price'] = $current_post_meta['_sale_price']; } else { $now = strtotime('now', current_time('timestamp')); if (!empty($sale_price_from) && strtotime($sale_price_from) < $now) { $post_meta['_price'] = $current_post_meta['_sale_price']; } if (!empty($sale_price_to) && strtotime($sale_price_to) < $now) { $post_meta['_price'] = $price; $post_meta['_sale_price_dates_from'] = ''; $post_meta['_sale_price_dates_to'] = ''; } } } } $post_meta['_price'] = ''; $post_meta['_regular_price'] = '';
Как говорится, всем спасибо)))
P.S. Автору плагина огромное спасибо за столь качественный и гибкий инструмент + понятный красивый код)
Для исправления изменения валюты магазина необходима в файле offers.php (лежит там же, где и import.php) закомментировать пару строк:
function wc1c_update_currency($currency) { if (!array_key_exists($currency, get_woocommerce_currencies())) return; //update_option('woocommerce_currency', $currency); $currency_position = array( 'RUB' => 'right_space', 'USD' => 'left', ); // if (isset($currency_position[$currency])) update_option('woocommerce_currency_pos', $currency_position[$currency]); }
Замечание.
В подобном случае, когда импортируете товары в разной валюте, при импорте файла offers.xml может меняться валюта магазина в целом.Получилось.
Дополняю предыдущий пост.Для 1С разделителем должна быть точка – это обязательно.
И добавилось еще одна строка в файл import.php:$post_meta = array( '_sku' => @$product['Артикул'], '_manage_stock' => 'yes', '_regular_currency_prices' => @$product['ЗначениеВариации'], '_product_base_currency' => @$product['ВариацияВалюты'], '_sale_currency_prices' => '[]', );
Получилось добавить новые поля следующим образом.
Для файла 1С поля выносятся таким образом:<Товары> <Товар> <Ид>34198bce-338c-11e6-bd42-080027004cfa</Ид> <Артикул>30254</Артикул> <Наименование>Втулка редукционная (КН-КВ) 1 1/2"x1 1/4" </Наименование> <БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница> <ЗначениеВариации>"EUR":"39,40"</ЗначениеВариации> <ВариацияВалюты>EUR</ВариацияВалюты> <Группы> <Ид>34198bd0-338c-11e6-bd42-080027004cfa</Ид> </Группы>
и далее по стандартной структуре.
И правим файл import.php (/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange) строка (652)
Было:$post_meta = array( '_sku' => @$product['Артикул'], '_manage_stock' => 'yes', );
Стало:
$post_meta = array( '_sku' => @$product['Артикул'], '_manage_stock' => 'yes', '_regular_currency_prices' => @$product['ЗначениеВариации'], '_product_base_currency' => @$product['ВариацияВалюты'], );
Новые значения для поля meta_key товара добавляются, но, увы, плагин их почему-то не подхватывает.
Копаем дальше)
Увы, закидывание полей как ЗначениеРеквизита не помогает