# Szállítás elrejtése termékkategória szerint

> A Szállítás lehetőség elrejtése a Szállítási mód lépésben, ha a kosárban egy megadott kategóriájú termék van, így csak a helyi átvétel marad.

Alapból a pénztár szállítási mód lépése minden kosárnál felajánlja a szállítást. Ha a kínálatod egy része nem szállítható, és csak személyesen vehető át, ezt kóddal kikényszerítheted: amint a kosárban van egy megadott kategóriájú termék, a szállítás lehetőség eltűnik, és csak a helyi átvétel marad.

## Mikor hasznos?

- terjedelmes, törékeny vagy veszélyes áruknál, amelyeket futár nem vihet;
- romlandó vagy rendelésre készülő termékeknél, amelyeket helyben kell átvenni;
- helyszíni szolgáltatásoknál, tanfolyamoknál vagy jegyeknél, amelyeknél nincs mit szállítani.

Kikényszerítés nélkül a vásárlón múlik, hogy elolvassa a figyelmeztetést, és a helyi átvételt válassza. Ha nem teszi, rendeléseket kell lemondanod, szállítási díjat visszatérítened, és újrafoglalásra kérned a vevőt.

## Beállítás

Előfeltétel, hogy a **Helyi átvétel** már be legyen kapcsolva szállítási módként (lásd [Helyi átvétel](https://hub.hellowp.io/hu/plugins/checkout-for-woocommerce/funkciok-helyi-atvetel/)).

1. Nézd meg a kategória *előtagját* (slug): **Termékek → Kategóriák**.
2. Másold be az alábbi kódot a gyermektéma `functions.php` fájljába vagy egy kódrészlet-kezelő bővítménybe.
3. Cseréld le a `your-category-slug` értéket a saját kategóriád előtagjára.

```php
/**
 * Igaz, ha a kosárban van legalább egy termék a megadott kategóriából.
 * Változatos termékeknél a szülő termék azonosítóját vizsgáljuk,
 * mert a változatok nem hordoznak saját kategóriát.
 */
function is_product_of_category_in_cart( $category_slug ) {
	if ( WC()->cart && ! WC()->cart->is_empty() ) {
		foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
			$product = $cart_item['data'];

			if ( $product->get_type() === 'variation' ) {
				$checked_product_id = $product->get_parent_id();
			} else {
				$checked_product_id = $product->get_id();
			}

			if ( has_term( $category_slug, 'product_cat', $checked_product_id ) ) {
				return true;
			}
		}
	}

	return false;
}

/**
 * A Szállítás lehetőség letiltása, ha a kosárban van ilyen kategóriájú termék.
 */
add_filter( 'cfw_local_pickup_disable_shipping_option', function () {
	$category = 'your-category-slug'; // Írd át a saját kategóriád előtagjára.

	return is_product_of_category_in_cart( $category );
} );
```

A kód egyszerű és változatos termékeknél is működik.

## Vegyes kosarak

A szállítás lehetőség akkor is el lesz rejtve, ha a kosárban a kijelölt kategória mellett szállítható termék is van. Ha egy A kategóriás (csak átvehető) és egy B kategóriás (szállítható) termék van a kosárban, kizárólag a helyi átvétel lesz választható. Ha azt szeretnéd, hogy a szállítható termékek vegyes kosárban is szállíthatók maradjanak, ez a kód nem megfelelő.
