# Változó termékek importálása

> Változó termékek és variációik importálása: a Variációk fül összekapcsolási módjai, attribútumok, XML-gyermekelemek, Shopify-fájl és variációk hozzáadása.

A WooCommerce a változó terméket egy szülőtermékként és több gyermek-variációként tárolja. Egy póló szülőtermék lehet például három variációval (S, M, L). A WP All Import olyan fájlt is be tud olvasni, amelyben a szülők és a variációk is benne vannak, és olyat is, amelyben csak variációk vannak szülők nélkül. A példában ez a fájl szerepel:

```csv
sku,szulo_sku,cim,szin,meret,ar,keszlet
POLO-PIROS-M,POLO,Pamut póló,Piros,M,5990,10
POLO-PIROS-L,POLO,Pamut póló,Piros,L,5990,7
POLO-KEK-M,POLO,Pamut póló,Kék,M,5990,5
POLO-KEK-L,POLO,Pamut póló,Kék,L,5990,0
```

## A menet

A lépések megegyeznek a [termékek importjával](https://hub.hellowp.io/hu/plugins/wpai-woocommerce-add-on/termekek-termekek-importalasa/): új import, **WooCommerce-termékek** típus, az importfájl áttekintése (itt XPath 1.0-val szűrhetsz is), a mezők hozzárendelése, az importbeállítások, a futtatás. A különbség a WooCommerce Add-On szakaszban van.

1. A **Terméktípus** listában válaszd a **Variálható termék** értéket.
2. Az **Általános** fülön add meg az árat. A WooCommerce a variációkat csak akkor jeleníti meg a webhelyen, ha van ár.
3. A **Készlet** fülön add meg az SKU-t és a készletadatokat.
4. Az **Attribútumok** fülön add meg a variáló tulajdonságokat (például **Szín**, **Méret**).
5. A **Variációk** fülön add meg, hogyan kapcsolódjanak a fájl rekordjai egyetlen változó termékhez.

## Attribútumok

Az attribútumok azok a tulajdonságok, amelyeket a vásárló választ a variáció kiválasztásához. Egy attribútumnak több értéke lehet. Egy pólónak lehet például **Szín** és **Méret** attribútuma.

![Az Attribútumok fül változó terméknél](./kepek/termekek-valtozo-attributumok.webp)

*Az Attribútumok fül változó terméknél* (https://minta-bolt.hu/wp-admin/admin.php?page=pmxi-admin-import&action=template)

A képen a **Szín** attribútum értéke a fájl `szin` oszlopából jön.

- Meglévő attribútumhoz a név helyett a slugját is használhatod, így a bővítmény közvetlenül azt az attribútumot keresi.
- Ha a fájlban többféle változó termék van eltérő attribútumokkal (a pólóknak **Szín** és **Méret**, a posztereknek **Vászonméret** és **Mélység**), add meg az összes attribútumot a sablonban. Ha egy termékhez nem tartozik egy attribútum, a bővítmény figyelmen kívül hagyja, így a pólókra nem kerül vászonméret.
- Néhány attribútumnév foglalt (például a „Type”). Ha a WooCommerce-ben nem használható egy név, a WP All Importban sem.
- A további beállításokról lásd: [Termék-attribútumok importálása](https://hub.hellowp.io/hu/plugins/wpai-woocommerce-add-on/termekek-attributumok/).

## A Variációk fül: összekapcsolási módok

A fül tetején választod ki, hogyan tartoznak össze a variációk. CSV-nél általában soronként egy variáció van, XML-nél rekordonként egy.

![A Variációk fül](./kepek/termekek-valtozo-variaciok.webp)

*A Variációk fül* (https://minta-bolt.hu/wp-admin/admin.php?page=pmxi-admin-import&action=template)

A képen a **Variációk** fül az összekapcsolási módokkal és alul a további beállításokkal látszik. Néhány módnak a felirata jelenleg angol.

### A. A szülő SKU-ja alapján

A fájl a szülőtermékeket és a variációkat is tartalmazza, és egy **SKU** és egy **Szülő SKU** oszlop köti össze őket. **A szülő SKU-eleme** mezőbe a szülők SKU-ja, **A változat szülőjének SKU-eleme** mezőbe a variációk szülő-SKU oszlopa kerül. A bővítmény a variációt ahhoz a szülőhöz rendeli, amelynek SKU-ja megegyezik a variáció szülő-SKU értékével. Például két termék (egy bögre és egy póló) két-két színváltozattal.

### B. Egyedi érték (csoportazonosító) alapján

Nincsenek szülőtermékek, a variációkat egy csoportazonosító oszlop köti össze (egy terméken belül minden variációnál ugyanaz, termékenként más). Mivel a WooCommerce-nek kell szülőtermék, a bővítmény létrehozza. Ez a mód igényli, hogy minden variációnak egyedi SKU-ja és szülő-SKU-ja legyen. A kiválasztás után a fülön megjelenik a **Készletkezelés?** és a **Készletállapot** beállítás is. (A mód felirata jelenleg angol: „All products with variations are grouped with a unique value…”.)

### C. A cím alapján

Egy adott termék minden variációjának címe megegyezik a szülőtermék címével, és a fájlban a szülők is benne vannak. A bővítmény a variációkat az azonos című szülőhöz rendeli. Például egy steak variációi súly szerint, a bárány variációi mennyiség szerint különböznek: a steaknél a mennyiség, a báránynál a súly attribútumot a bővítmény figyelmen kívül hagyja.

### D. A cím alapján, szülőtermékek nélkül

Egy adott termék minden variációjának címe megegyezik, szülőtermékek nincsenek. A bővítmény létrehozza a szülőket, mindegyikhez az azonos című variációkat rendelve. Például egy almafa és egy narancsfa, mindkettő négy-négy variációval (magasság és alany szerint). Ez a mód is igényli, hogy minden variációnak egyedi SKU-ja és szülő-SKU-ja legyen.

### E. XML-gyermekelemek

Ezt akkor használd, ha XML-fájlt importálsz, és a variációk nem külön termékelemek, hanem a termékelem gyermekelemei, például egy `<variants>` elemen belül `<variant>` elemek:

```xml
<Product>
	<SKU>10027105</SKU>
	<Product_Name>Férfi vászoncipő</Product_Name>
	<Retail_Price>74.99</Retail_Price>
	<Sale_Price>59.99</Sale_Price>
	<Extended_Xml_Attributes>
		<variants>
			<variant>
				<sku>19301</sku>
				<size>8</size>
				<color>Sötétkék</color>
				<retail_price>74.99</retail_price>
				<sale_price>59.99</sale_price>
			</variant>
			<variant/>
		</variants>
	</Extended_Xml_Attributes>
</Product>
```

- Az **Általános** és az **Attribútumok** fülön nem kell semmit megadnod: az árat és az attribútumokat közvetlenül a **Variációk** fülön állítod be. Kivétel, ha a fájl ezt igényli, vagy ha egyszerű termékeket is importálsz a variációs elemeken kívüli attribútumokkal.
- Hogy a bővítmény felismerje a variációkat, a `<variant>` elemek egyikét húzd a variációk XPath-mezőjébe.
- Az attribútumokat a felugró, a variációhoz tartozó XML-fából húzd, ne a fő fából.
- Az árat is a variáció XML-fájából add meg, ha ott van. Ha minden variáció a szülő árát kapja, húzd az árat a fő fából. Ha a variációk XPath-mezője alatti mezőkbe a fő fából húzol elemet, jelöld be a szülőtől számított XPath lehetőséget.
- Elég egyetlen variációt beállítani: a bővítmény végigmegy a többin is, és mindegyikhez létrehoz variációt.
- Ez a mód is igényli az egyedi SKU-t és szülő-SKU-t.

Egyedi mezőket a variációkhoz az **Egyéni mezők** szakaszban adhatsz meg az E. mód kivételével; az E. módnál egyedi kódra van szükség.

### F. Új variációk meglévő termékekhez

Az „I'm importing new variations to existing products” lehetőség (a felirata jelenleg angol) csak **új elemek** importjánál érhető el. A meglévő szülőtermékhez egyedi mező vagy a termék címe alapján találhatsz egyezést, és használhatod azt is, hogy ha nincs meglévő termék, a bővítmény új terméket hoz létre. Ezzel egyszerű termékeket is változóvá alakíthatsz.

## További beállítások a Variációk fülön

| Beállítás | Mit csinál |
| --- | --- |
| **Változat engedélyezve** | Alapból **Igen**. Ugyanaz, mint a variáció „Engedélyezve” jelölőnégyzete a WooCommerce-ben. Lehet **Igen**, **Nem** vagy **Beállítás XPath-szal** (`yes` vagy `no`). |
| **Állítsd be az alapértelmezett kijelölést az attribútumok legördülő menüiben.** | Alapból ki van kapcsolva. Bekapcsolva az első variációt, az első raktáron lévőt vagy XPath-szal megadott értéket állít be (az XPath szerializált adatot fogad, például `a:2:{s:7:"pa_size";s:3:"6-5";s:8:"pa_color";s:3:"red";}`). |
| **A legördülő menük alapértelmezett kijelölésének mellőzése.** | Alapból be van kapcsolva. |
| **Variáció nélküli termékek létrehozása egyszerű termékként.** | Alapból be van kapcsolva. Kapcsold ki, ha egyetlen variációjú termékből is változó terméket akarsz. |
| **Variációs kép mentése a galériába.** | Alapból ki van kapcsolva. Bekapcsolva a variációk képe a termékgalériába is bekerül. |

## Képek

A szülőrekordban megadott képek a termékhez kerülnek. Az első kép lesz a kiemelt kép, ha be van kapcsolva az **Az első kép beállítása kiemelt képként** jelölőnégyzet, a többi a termékgalériába kerül. A variációs rekordban megadott képek magához a variációhoz tartoznak. Ha ezeket a termékgalériába is be akarod venni, kapcsold be a **Variációs kép mentése a galériába.** lehetőséget.

A WooCommerce alapból variációnként egy képet tud. Ha telepítve van a WooCommerce Additional Variation Images vagy az Additional Variation Images Gallery for WooCommerce bővítmény, a **Variációk** fülön megjelenik az **Import additional variation images** lehetőség (a felirata jelenleg angol), amely a több variációs képet a telepített bővítménynek adja át. Más bővítménynél egyedi kód kell, amely a `pmxi_gallery_image` műveletre épül.

## Haladó témák

### Egyszerű és változó termékek egyszerre

Állítsd be az importot úgy, mintha csak változó termékeket importálnál. A bővítmény az egyszerű terméket (variáció nélküli vagy egyetlen variációjú) magától egyszerű termékként hozza létre, amíg be van kapcsolva a **Variáció nélküli termékek létrehozása egyszerű termékként.** jelölőnégyzet. Ha minden terméket változóként akarsz, kapcsold ki.

### Shopify-ból exportált fájl

A Shopify exportja különleges szerkezetű, de módosítás nélkül is importálható. A lényege:

1. A **Készlet** fülön az SKU legyen ez:

   ```
   {handle[1]}[generate_attribute_string({option1value[1]},{option2value[1]},{option3value[1]})]
   ```

   Itt három `option*value` oszlop van, de kevesebb vagy több is lehet, ehhez igazítsd a függvényhívást.
2. Add hozzá ezt a kódot az **All Import → Beállítások** oldal függvényszerkesztőjéhez:

   ```php
   function generate_attribute_string() {
       $result = '';
       $attributes = func_get_args();
       foreach ($attributes as $attribute) {
           if (!empty($attribute)) {
               $result .= '-' . sanitize_title($attribute);
           }
       }
       return $result;
   }
   ```
3. Az **Attribútumok** fülön az attribútum neve ez legyen (az értékhez ugyanazt az `{option1name[1]}` elemet használd; több attribútumnál ismételd a megfelelő számmal):

   ```
   [my_attribute_name({handle[1]}, "option1name", {option1name[1]})]
   ```
4. Ugyanabban a függvényszerkesztőben add meg a hozzá tartozó függvényeket:

   ```php
   function my_attribute_name($handle, $key, $value = '') {
       $import_id = wp_all_import_get_import_id();
       $option_name = 'soflyy-' . $import_id . '-attribute-name';
       $attributes = get_option($option_name, []);
       if (empty($value)) {
           if (isset($attributes[$handle][$key])) {
               return $attributes[$handle][$key];
           }
           return null;
       }
       if (!isset($attributes[$handle])) {
           $attributes[$handle] = [];
       }
       $attributes[$handle][$key] = $value;
       update_option($option_name, $attributes);
       return $value;
   }

   function after_xml_import($import_id, $import) {
       if ($import_id == 1) {
           $option_name = 'soflyy-' . $import_id . '-attribute-name';
           delete_option($option_name);
       }
   }
   add_action('pmxi_after_xml_import', 'after_xml_import', 10, 2);
   ```

   Az `$import_id == 1` feltételben a saját import azonosítódat add meg.
5. A **Variációk** fülön az egyedi érték és a szülő SKU is a `{handle[1]}` legyen.
6. A **Képek** szakaszban feltételes kifejezéssel válaszd ki a képet:

   ```
   [IF({variantimage[.!='']})]{variantimage[1]}[ELSE]{imagesrc[1]}[ENDIF]
   ```
7. Az egyedi azonosító tartalmazza a `{handle[1]}` elemet és az összes opciót, például:

   ```
   {handle[1]} - {variantsku[1]} - {option1value[1]}-{option2value[1]}-{option3value[1]}
   ```

### Variációs adatok egy sorban („Összes variáció összekapcsolása”)

Az **Attribútumok** fülön van az **Összes variáció összekapcsolása** jelölőnégyzet, a WooCommerce azonos nevű funkciójának megfelelője. Akkor használd, ha egy termék minden variációjának adata egyetlen sorban van, függőleges vonallal (`|`) elválasztva. Például a sapkának három színe lehet: `Piros|Kék|Zöld`. A bővítmény minden színhez létrehoz egy variációt. Amikor ezt bekapcsolod, a **Variációk** fül eltűnik.

Ha a fájlban más elválasztó van, PHP-függvénnyel cserélheted `|` jelre. Például vesszők esetén:

```
[str_replace(",", "|", {Color[1]})]
```

### Variációs készlet a szülőtermék készletkezelése nélkül

Az A. és C. módnál előfordulhat, hogy a készletkezelést csak a variációknál vagy az egyszerű termékeknél akarod megtartani, a szülőnél nem. Ez egyedi kóddal oldható meg:

```php
// A változó szülőtermékeknél nincs készletkezelés, az egyszerű termékeknél marad.
add_action( 'wp_all_import_variable_product_imported', 'parent_no_stock', 10, 1 );
function parent_no_stock( $id ) {
    $is_converted = get_post_meta($id, '_wpai_converted_to_simple', true);
    if ( empty($is_converted) ) {
        $prod = wc_get_product( $id );
        $prod->set_manage_stock( false );
        $prod->save();
    }
}

add_action( 'wp_all_import_make_product_simple', 'my_wpai_simple_product_func', 10, 2 );
function my_wpai_simple_product_func( $prod_id, $import_id ) {
    update_post_meta($prod_id, '_wpai_converted_to_simple', 1);
}
```

Ha csak egy bizonyos importra akarod korlátozni, az `wp_all_import_get_import_id()` visszatérési értékét vizsgáld a függvények elején.

### Variációs fájl készítése Excelben vagy Google Táblázatokban

Ha nincs kész termékfeeded (nincs pénztárrendszer, készletkezelő vagy beszállítói feed), a variációs fájlt kézzel is összeállíthatod Excelben, a fenti módok bármelyikének szerkezetével. Google Táblázatokban ugyanez működik, és a táblázat megosztási URL-jével állítod be az importot.

### Variációk importja CSV-ből és XML-ből, XML-gyermekelemekkel

Az összekapcsolási módok (A-tól E-ig) a CSV- és XML-fájlokra egyaránt vonatkoznak, az XML-gyermekelemes forma az E. módban van leírva.

## Gyakori kérdések

**Hogyan tölthetek fel sok változó terméket?**
Kövesd ezt a leírást. Minden olyan import tömeges feltöltés, amely egynél több változó terméket érint.

**Hogyan adhatok új variációkat meglévő változó termékhez?**
1. Hozz létre új importot az **All Import → Új importálás** oldalon.
2. Töltsd fel az új variációkat tartalmazó fájlt.
3. A **Variációk** fülön válaszd az új variációk meglévő termékekhez importálására szolgáló lehetőséget.
4. Futtasd az importot, és ellenőrizd az eredményt.

Ez csak **új elemek** importjánál lehetséges. A meglévő szülőt egyedi mezővel vagy a termék címével találhatod meg, és be lehet kapcsolni azt is, hogy ha nincs ilyen termék, hozzon létre újat. Egyszerű terméket is változóvá alakíthatsz így.

**Hogyan adhatok új variációkat tömeges szerkesztéssel?**
1. Hozz létre WooCommerce-termék exportot a WP All Exporttal.
2. Egészítsd ki az exportált fájlt az új variációkkal, a meglévő sorok szerkezetét követve. Ha nincs még változó termék, a szülősor legyen a hozzá tartozó variációk fölött (lásd az A. módot).
3. Az **All Export → Exportálások kezelése** oldalon használd az importálás lehetőséget.
4. Hagyd változatlanul a beállításokat, és importáld vissza a termékeket.

**Mi a helyes módja a változó termékek kezelésének?**
A változó termékek különleges módon tárolódnak, ezért érdemes egy fő importot fenntartani, amelyet újra lehet futtatni, és amely egyetlen fő fájlból kezel minden terméket. Használj **új elemek** típusú importot, mert ez az egyetlen, amely variációkat tud hozzáadni és eltávolítani. Alapból így jön létre az import, ha nem változtatod meg az egyeztetési beállításokat. Így a variációkat szerkesztheted anélkül, hogy a változó terméket károsítanád.

**Hogyan exportálhatom a termékvariációkat?**
1. Nyisd meg az **All Export → Új exportálás** oldalt.
2. Válaszd a **WooCommerce-termékek** típust.
3. Válaszd ki az oszlopokat. A termék attribútumok és variációk oszlopai alapból ki vannak jelölve.
4. Töltsd le az exportált fájlt.

**Hogyan importálhatok termékadatot vagy termékképet?**
Nyisd meg az **All Import → Új importálás** oldalt, válaszd ki a fájlt és a **WooCommerce-termékek** típust, húzással rendeld hozzá a mezőket (a képadatot is), majd futtasd az importot.

**Milyen kiegészítők kellenek?**
A WP All Import Pro és a WooCommerce Add-On.
