Forum Replies Created

Viewing 12 replies - 1 through 12 (of 12 total)
  • Если надо выгружать и туда, и туда, то:

    $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');

    и дальше без изменений. То есть, мы игнорируем проверку условия и в любом случае записуем полное описание.

    Примечание: в таком случае анонс будет пустой.

    Thread Starter dragomagic

    (@dragomagic)

    Только руки опять дошли до этой проблемы – получилось “победить”.
    Сама проблема связанна с внутренними функциями Ворпресса.

    Есть 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шт.

    Thread Starter dragomagic

    (@dragomagic)

    и каким образом решается проблема?

    Проверьте пути и вообще наличие файлов для импорта, т.к. скрипт ругается на то, что нужного файла / директории не существует.
    Файл с данными для импорта должен находится в данной директории
    uploads/woocommerce-1c/catalog/
    а у вас его там видимо нет

    Thread Starter dragomagic

    (@dragomagic)

    Не удается отредактировать сообщение, поэтому еще раз привожу формат для 1С:

    <Товары>
    			<Товар>
    				<Ид>34198bce-338c-11e6-bd42-080027004cfa</Ид>
    				<Артикул>30254</Артикул>
    				<Наименование>Втулка редукционная  (КН-КВ) 1 1/2"x1 1/4"  </Наименование>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<ЗначениеВариации>{"EUR":"39.40"}</ЗначениеВариации>
    				<ВариацияВалюты>EUR</ВариацияВалюты>
    				<Группы>
    					<Ид>34198bd0-338c-11e6-bd42-080027004cfa</Ид>
    				</Группы>
    Thread Starter dragomagic

    (@dragomagic)

    И пожалуй последнее примечание)

    Если не требуется, что бы на товар становилась цена, которая подтягивается из файла 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. Автору плагина огромное спасибо за столь качественный и гибкий инструмент + понятный красивый код)

    Thread Starter dragomagic

    (@dragomagic)

    Для исправления изменения валюты магазина необходима в файле 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]);
    }

    Thread Starter dragomagic

    (@dragomagic)

    Замечание.
    В подобном случае, когда импортируете товары в разной валюте, при импорте файла offers.xml может меняться валюта магазина в целом.

    Thread Starter dragomagic

    (@dragomagic)

    Получилось.
    Дополняю предыдущий пост.

    Для 1С разделителем должна быть точка – это обязательно.
    И добавилось еще одна строка в файл import.php:

    $post_meta = array(
        '_sku' => @$product['Артикул'],
        '_manage_stock' => 'yes',
    	'_regular_currency_prices' => @$product['ЗначениеВариации'],
    	'_product_base_currency' => @$product['ВариацияВалюты'],
    	'_sale_currency_prices' => '[]',
      );

    Thread Starter dragomagic

    (@dragomagic)

    Получилось добавить новые поля следующим образом.
    Для файла 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 товара добавляются, но, увы, плагин их почему-то не подхватывает.

    Копаем дальше)

    Thread Starter dragomagic

    (@dragomagic)

    Увы, закидывание полей как ЗначениеРеквизита не помогает

Viewing 12 replies - 1 through 12 (of 12 total)