# Árazási példák: adóosztály, SKU, súly, ingyenes minta

> Gyakorlati megoldások: másik adóosztály egy kiegészítőre, cikkszám és súly a kiegészítőknek, ingyenes minták közvetlen kosárba tétele.

Ezek a megoldások a **Termékek** mezőtípusra épülnek (Pro változat): a kiegészítőt önálló termékként hozod létre, így lehet saját ára, adóosztálya, cikkszáma, súlya és készlete.

## Másik adóosztály egy kiegészítő opcióra

A mezők és opciók ára a fő termék adóosztályát követi. Ha egy kiegészítőre más adóosztály kell:

1. Hozz létre egy új terméket a kiegészítő opcióhoz. Ha nem szeretnéd, hogy megjelenjen a bolt oldalain, rejtsd el (lásd lent a rejtett termékeket).
2. Rendelj hozzá adóosztályt ehhez a termékhez.
3. A fő terméken adj hozzá egy **Termékek** mezőt, és gyermekterméknek add meg az új kiegészítő-terméke(ke)t.
4. A fő terméknek is add meg az adóosztályát.

Amikor a vásárló kiválaszt egy vagy több opciót, azok ára a fő termékétől eltérő adóosztályt kap.

## Cikkszám (SKU) a kiegészítőknek

A kiegészítő opcióknak alapból nincs cikkszáma. Ha kell (például követnéd a készletüket), a legjobb megoldás a **Termékek** mezőtípus: a kiegészítőt önálló termékként hozod létre ár, súly, készlet és cikkszám megadásával, majd gyermekterméknek rendeled a fő termékhez. A mezőtípus beállításai a [Termékek mező](https://hub.hellowp.io/hu/plugins/product-extras-for-woocommerce/mezotipusok-termekek/) fejezetben vannak.

### A gyermektermékek önálló vásárlásának tiltása

Ha nem szeretnéd, hogy a gyermektermékeket a vevő külön is megvegye, állítsd a termék láthatóságát rejtettre. A bolt oldalain ekkor nem jelenik meg, de aki ismeri a webcímét, még elérheti. Hogy ez se menjen, kapcsold be a **WooCommerce → Beállítások → Termékkiegészítők → Termékek** oldalon a **Rejtett termékek átirányítása** beállítást.

### Dinamikus cikkszám

Ha a cikkszámot a választott opciók szerint szeretnéd alakítani (például betűt vagy számot fűznél a termék cikkszámához), ahhoz egyéni paramétert kell a mezőkhöz adni, kóddal.

## Súly a kiegészítőknek

A szállítási díj számításához gyakran kell a kiegészítők súlya is. Három módszer van:

- **Gyermektermékekkel (kód nélkül, Pro):** a kiegészítőket önálló termékként hozod létre, saját súllyal és mérettel. Ha a vásárló kiválasztja őket, a súlyuk a kosárba kerül, és a szállítási díj helyesen számolódik. A gyermektermékeket elrejtheted a bolt többi részéből (**Rejtett termékek átirányítása**). Súly alapú szállítási bővítménnyel együtt a kiegészítők súlya hat a szállítási díjra.
- **Számítás mezővel (Pro):** a [Számítás mező](https://hub.hellowp.io/hu/plugins/product-extras-for-woocommerce/mezotipusok-szamitas/) a felhasználói bevitelekből, árakból és más változókból értéket számol, ezzel a termék súlya is beállítható.
- **Kóddal:** rádiógomb- vagy kiválasztás mezők opcióihoz egy kódrészlettel súly-paramétert is adhatsz. Három részből áll: egy szám típusú mezőt ad az opciók beállításához, a választott opciók súlyát összegzi a kosár adataiban, és a kosárban kiírja a súlyt.

```php
<?php
/**
 * Súly-paraméter hozzáadása a mezők opcióihoz
 */
function prefix_add_option_param( $option_count, $group_id, $item_key, $item, $key ) {
	$name = '_product_extra_groups_' . esc_attr( $group_id ) . '_' . esc_attr( $item_key ) . '[field_options][' . esc_attr( $option_count ) . ']';
	$weight = isset( $item['field_options'][esc_attr( $key )]['weight'] ) ? $item['field_options'][esc_attr( $key )]['weight'] : '';
	?>
	<td class="pewc-option-extra">
		<input type="number" class="pewc-field-option-weight" name="<?php echo $name; ?>[weight]" value="<?php echo esc_attr( $weight ); ?>" step="0.01">
	</td>
	<?php
}
add_action( 'pewc_after_option_params', 'prefix_add_option_param', 10, 5 );

/**
 * A súly hozzáadása a kosártétel adataihoz
 */
function prefix_end_add_cart_item_data( $cart_item_data, $item, $group_id, $field_id, $value ) {
	if ( ! empty( $item['field_options'] ) ) {
		$value_arr = ( strpos( $value, ' | ' ) !== false ) ? explode( ' | ', $value ) : array( $value );
		foreach ( $value_arr as $value ) {
			foreach ( $item['field_options'] as $option ) {
				$option_len = strlen( $option['value'] );
				if ( substr( $value, 0, $option_len ) == $option['value'] ) {
					$weight = isset( $cart_item_data['product_extras']['weight'] ) ? $cart_item_data['product_extras']['weight'] : 0;
					$weight += floatval( $option['weight'] );
					$cart_item_data['product_extras']['weight'] = $weight;
				}
			}
		}
	}
	return $cart_item_data;
}
add_filter( 'pewc_filter_end_add_cart_item_data', 'prefix_end_add_cart_item_data', 10, 5 );

/**
 * A súly kiírása a kosárban
 */
function prefix_get_item_data( $item_data, $cart_item ) {
	if ( ! empty( $cart_item['product_extras']['weight'] ) ) {
		$item_weight = $cart_item['product_extras']['weight'];
		$item_data[] = array(
			'key'     => __( 'Weight', 'woocommerce' ),
			'value'   => $item_weight,
			'display' => $item_weight . ' ' . get_option( 'woocommerce_weight_unit' ),
		);
	}
	return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'prefix_get_item_data', 10, 2 );
```

## Ingyenes minták közvetlenül a kosárba

A **Termékek** mezővel (Pro) elérheted, hogy a vásárló a termékoldalról ingyenes mintákat tegyen a kosarába anélkül, hogy bármi mást venne.

1. **Hozz létre egy terméket minden mintához.** Például egy szövetmintánál kék, zöld és piros mintához három termék kell. Az áruk legyen 0, a kiemelt képük a minta képe. Ha nem akarod őket a bolt kínálatában, a **Katalógus láthatósága** legyen **Rejtett**. Betehetsz őket külön kategóriába is.
2. **Add a mintákat a fő termékhez.** A fő terméken vegyél fel egy **Termékek** mezőt, és állítsd be: a **Gyermektermékek** a minta-termékek, a **Termékek elrendezése** **Jelölőnégyzetes képek**, a **Termékmennyiségek** **Csak egy**. Jegyezd meg a mező azonosítóját (a példában 4083).
3. **Add hozzá a kódrészletet** a webhelyedhez (kódrészlet-kezelő bővítménnyel vagy a `functions.php`-ban). A rész elején a `demo_get_free_sample_field_ids()` függvényben cseréld le a mezőazonosítókat a sajátodéra.

```php
<?php
function demo_get_free_sample_field_ids() {
	return array( 123, 456, 789 ); // Írd át a saját mezőazonosítóidra
}

// A minta-mezők kapnak egy saját CSS-osztályt
function demo_child_product_wrapper_classes( $wrapper_classes, $child_product_id, $item ) {
	if ( in_array( $item['field_id'], demo_get_free_sample_field_ids() ) ) {
		$wrapper_classes[] = 'sample-wrapper';
	}
	return $wrapper_classes;
}
add_filter( 'pewc_child_product_wrapper_classes', 'demo_child_product_wrapper_classes', 10, 3 );

// Hozzáadás és eltávolítás gomb a minták neve után
function demo_after_child_product_item( $name, $item, $available_stock, $child_product ) {
	if ( in_array( $item['field_id'], demo_get_free_sample_field_ids() ) ) {
		$add = sprintf(
			'<p><a href="#" class="button alt pewc-add-button">%s</a><a href="#" class="button pewc-add-button pewc-added">%s</a></p>',
			__( 'Add', 'pewc' ),
			__( 'Remove', 'pewc' )
		);
		return $name . $add;
	}
	return $name;
}
add_filter( 'pewc_child_product_name', 'demo_after_child_product_item', 10, 4 );

// AJAX: a minta közvetlen kosárba tétele
function pewc_ajax_add_child_product_to_cart() {
	$result = WC()->cart->add_to_cart( intval( $_POST['product_id'] ), intval( $_POST['quantity'] ) );
	$result ? wp_send_json_success() : wp_send_json_error();
}
add_action( 'wp_ajax_pewc_add_child_product_to_cart', 'pewc_ajax_add_child_product_to_cart' );
add_action( 'wp_ajax_nopriv_pewc_add_child_product_to_cart', 'pewc_ajax_add_child_product_to_cart' );
```

A minták ettől még nem kerülnek kosárba: a gomb kattintását egy kis JavaScript is kezeli, amely az AJAX-hívást elküldi a kiválasztott minta azonosítójával és mennyiségével. A lábléc scriptjében ezt a hívást kell megvalósítani:

```javascript
jQuery( '.child-product-wrapper .pewc-add-button:not(.pewc-added)' ).on( 'click', function ( e ) {
	e.preventDefault();
	var $gomb = jQuery( this );
	var $minta = $gomb.closest( '.pewc-checkbox-image-wrapper' );
	var mennyiseg = $minta.find( '.pewc-quantity-wrapper input' ).val() || 1;
	var termekId = $minta.find( '.pewc-checkbox-form-field' ).val();
	$gomb.css( 'pointer-events', 'none' );
	jQuery.ajax( {
		url: pewc_vars.ajaxurl,
		type: 'POST',
		data: { action: 'pewc_add_child_product_to_cart', product_id: termekId, quantity: mennyiseg },
		success: function ( valasz ) {
			if ( valasz.success ) {
				$gomb.text( 'A kosárba került' );
				jQuery( 'body' ).trigger( 'wc_fragment_refresh' );
			} else {
				$gomb.css( 'pointer-events', 'auto' );
			}
		}
	} );
} );
```

A minta-mezők kinézetét (például az ár elrejtését és a keret nélküli megjelenítést) a `.sample-wrapper` osztályra írt saját CSS-sel igazíthatod.
