asnever
Forum Replies Created
-
@meckerpry тут необходимо понимать о чем речь. Т.е. допустим у вас на сайте есть глобальный атрибут цвет, и у него есть значения (термины) – зеленый, синий, красный. Соответственно, их слаги (значения) будут, допустим, zelenyj sinij, krasnyj (если к примеру вы используете cyr-to-lat).
Так вот нужно именно это значение тут вставлять. Т.е. просто одной строчкой не решить, перед тем как присвоить $value этот значение, его нужно сначала определить. Я делал так – создавал массив, где ключами были эти нужные слаги глобального атрибута, а значениями – то что приходит из 1с. Выполнял поиск в массиве значения из 1с, и найденный ключ и был искомым значением, которое присваивалось переменной $value
Сейчас я уже не использую эту схему, переработал по другому, более логично и правильно, но больше кода- This reply was modified 5 years, 8 months ago by asnever.
@andyganesh если вы решили изменять код плагина, то тогда вам нужно проследить по всему файлу import.php где используются Свойства, и заменить на ваше СвойстваНоменклатуры, плюс как у вас значения свойств выгружаются, также пробежаться по всему файлу если вдруг есть отличия. Но это так себе вариант. Хотя по идее работать должен.
Для свойств, которые попадают в глобальные атрибуты, есть фильтр ‘wc1c_import_property_xml’
попробуйте добавить в functions.php такой кодadd_filter( ''wc1c_import_property_xml', 'theme_name_wc1c_filter_property', 10, 2 ); function theme_name_wc1c_filter_property( $property, $is_full ) { var_dump( $property ); return $property; }вручную выполнить импорт с помощью запроса в браузере (https://wordpress.org/plugins/woocommerce-and-1centerprise-data-exchange/#%D0%BA%D0%B0%D0%BA%20%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E%20%D0%B2%D0%BE%D1%81%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%B8%20%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%20%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2%3F)
и посмотрите что там приходит у вас, и тогда уже сможете оценить, есть ли возможность изменить массив $property и передать дальше для обработки правильные значения- This reply was modified 5 years, 11 months ago by asnever.
@andyganesh вообще при импорте именно глобальные атрибуты и создаются. Взможно у вас проблема в том, что вы отправляете ЗначенияРеквизитов, тогда как для простых товаров, чтобы атрибуты создавались как глобальные, необходимо передавать СвойстваТовара в файле import.xml
/* * Фильтруем вариации при получении из 1с, цепляемся за хук wc1c_post_offer_meta */ add_action( 'wc1c_post_offer_meta', 'theme_name_filter_attributes_wc1c', 10, 3 ); function theme_name_filter_attributes_wc1c( $post_id, $offer, $is_full ) { if ( isset( $offer['ХарактеристикиТовара'] ) ) { $key = array_search( 'здесь пишем наименование характеристики, как в 1с', array_column( $offer['ХарактеристикиТовара'], 'Наименование' ) ); if ( false !== $key ) { $product = wc_get_product( $post_id ); if ( 'variation' == $product->get_type() ) { // меняем атрибуты родительского товара $parent = wc_get_product( $product->get_parent_id() ); $parent_attributes = $parent->get_attributes(); if ( array_key_exists( $slug, $parent_attributes ) ) { // $slug -это слаг локального (индивидуального) атрибута на сайте, не наименование из 1с, это важно unset( $parent_attributes[ $slug ] ); } $new_attr = new WC_Product_Attribute(); $new_attr->set_id( 7 ); // в моем случае 7, в общем случае - id глобального атрибута на сайте $new_attr->set_name( 'pa_' . $slug ); $new_attr->set_options( [1,2,3] ); // тут id значений глобального атрибута на сайте, в массиве $new_attr->set_variation( true ); // делаем доступным для вариаций $new_attr->set_position( 0 ); // можно задавать позицию в списке атрибутов товара $parent_attributes['pa_' . $slug] = $new_attr; $parent->set_attributes( $parent_attributes ); // теперь, если нужно, можно установить значение атрибута для вариации по умолчанию $def_attr = $parent->get_default_attributes(); $def_attr['pa_' . $slug] = $value_slug; // тут пишем слаг значения атрибута, который хотим установить по умолчанию $parent->set_default_attributes( $def_attr ); $parent->save(); // меняем атрибуты дочернего товара $attributes = $product->get_variation_attributes(); if ( array_key_exists( 'attribute_' . $slug, $attributes ) ) { unset( $attributes['attribute_' . $slug] ); } $value = тут необходимо получить значение глобального атрибута именно для текущей вариации, через проверку по имени или другим способом, получить нужно именно слаг атрибута $attributes['attribute_pa_' . $slug] = $value; $product->set_attributes( $attributes ); $product->set_stock_status( 'instock' ); // если нужно $product->save(); // синхронизируем статусы для основного и вариативных товаров (это уже по потребностям конкретной ситуации) if ( $parent->child_is_in_stock() ) { $parent->set_manage_stock( false ); $parent->set_stock_status( 'instok' ); $parent->save(); } } } } }В общем два дня ковыряния в коде плагина привели к решению, оно конечно не идеальное, но другого пока не нашел. Вообще в плагине очень мало хуков, за которые можно зацепиться и хоть как-то кастомизировать его поведение.
Свой вопрос решил следующим образом:- This reply was modified 5 years, 12 months ago by asnever.