# Kosár: szerkesztés és megjelenés

> Kiegészítők szerkesztése a kosárból, szülőtermék megtartása, mezők és értékek elrejtése vagy átformázása a kosárban.

Ez a fejezet azt mutatja meg, hogyan működnek a kiegészítő mezők a kosárban: a vásárló utólag módosíthatja a választásait, és te szabályozhatod, mit lát a kosár és a pénztár. A kódrészleteket a sablon `functions.php` fájljába vagy egy kódrészlet-kezelő bővítménybe tedd.

## Kiegészítők szerkesztése a kosárból

Alapból a vásárlónak ki kell vennie a terméket a kosárból, ha meggondolja magát egy kiegészítő mezőben. A szerkesztés bekapcsolásával a kosárból visszaléphet a termékoldalra.

1. Nyisd meg a **WooCommerce → Beállítások → Termékkiegészítők** oldalt.
2. Az **Általános** fülön, a **Fejlesztések** résznél jelöld be a **Kosárszerkesztés bekapcsolása** négyzetet.
3. Mentsd a beállításokat.

Ettől kezdve a kosárban a terméknév mellett megjelenik az **Opciók szerkesztése** hivatkozás.

![A kosár egy sora a terméknév melletti Opciók szerkesztése hivatkozással](./kepek/kosar-rendeles-kosar-szerkesztes.webp)

*A kosár egy sora a terméknév melletti Opciók szerkesztése hivatkozással* (https://minta-bolt.hu/kosar/)

A képen a termék neve után látod a hivatkozást, alatta a kiválasztott kiegészítőket.

A hivatkozásra kattintva a vásárló visszakerül a termékoldalra, ahol a korábbi választásai már be vannak állítva. A módosítás után a **Termék frissítése** gombra kattint, és a kosár sora az új értékekkel frissül.

![A termékoldal szerkesztő módban, előre kitöltött mezőkkel és a Termék frissítése gombbal](./kepek/kosar-rendeles-termek-frissites.webp)

*A termékoldal szerkesztő módban, előre kitöltött mezőkkel és a Termék frissítése gombbal* (https://minta-bolt.hu/product/keramia-bogre/?attribute_szin=Piros&pewc_key=8cafb0cd29ccfb4883eddcc5d652b907)

A képen a mezők a kosárba tett értékekkel töltődnek be, a gomb felirata pedig **Termék frissítése**.

### A hivatkozás szövegének átírása

Az **Opciók szerkesztése** szöveget a `pewc_after_cart_item_edit_options_text` szűrővel cserélheted. A szűrő megkapja a termék azonosítóját is, így termékenként más szöveget adhatsz.

```php
function pelda_szerkesztes_hivatkozas( $szoveg, $termek_id ) {
    return 'Választások módosítása';
}
add_filter( 'pewc_after_cart_item_edit_options_text', 'pelda_szerkesztes_hivatkozas', 10, 2 );
```

## A szülőtermék megtartása a kosárban

Ha egy termék kiegészítője másik termék (altermék), alapból az altermék kivétele a kosárból a szülőtermékét is kiveszi. Ha azt szeretnéd, hogy a szülőtermék a kosárban maradjon, két módon érheted el:

- Jelöld be a **Szülőtermék megtartása** beállítást a **WooCommerce → Beállítások → Termékkiegészítők** oldal **Termékek** fülén.
- Vagy használd a `pewc_do_not_remove_parents` szűrőt:

```php
add_filter( 'pewc_do_not_remove_parents', '__return_true' );
```

## Mezőtípusok elrejtése a kosárban és a pénztárban

Egyes mezőtípusok, például a számítás vagy a szám, csak a háttérszámításhoz kellenek, a vásárlónak nincs rájuk szüksége a kosárban. A `pewc_hidden_field_types_in_cart` szűrő a megadott típusú mezőket kihagyja a kosár és a pénztár kiegészítő-listájából.

```php
function pelda_rejtett_mezotipusok_a_kosarban( $mezotipusok ) {
    return array( 'calculation', 'number' );
}
add_filter( 'pewc_hidden_field_types_in_cart', 'pelda_rejtett_mezotipusok_a_kosarban' );
```

A függvény a visszaadott tömbbel felülírja a bejövőt, ezért minden elrejtendő típust sorolj fel benne. A függvénynevet cseréld egyedire, hogy ne ütközzön más kóddal. A rendelés adatai közül ugyanígy rejthetsz mezőtípusokat, erről a [Rendelések: kiegészítők kezelése](https://hub.hellowp.io/hu/plugins/product-extras-for-woocommerce/kosar-rendeles-rendelesek/) fejezet szól.

## Számítás értékének elrejtése, csak az ár marad

Ha egy számítás mező árat ad, a kosárban a nyers értéke is megjelenik a termék adatai között. Ha csak az árat szeretnéd mutatni, üresre állíthatod a számítás mezők megjelenített értékét a `pewc_filter_item_value_in_cart` szűrővel:

```php
function pelda_szamitas_erteke_rejtve( $ertek, $elem ) {
    if ( isset( $elem['type'] ) && 'calculation' === $elem['type'] ) {
        $ertek = '';
    }
    return $ertek;
}
add_filter( 'pewc_filter_item_value_in_cart', 'pelda_szamitas_erteke_rejtve', 10, 2 );
```

A szűrő minden számítás mezőre hat, így egyes mezőket nem tudsz külön kivenni belőle, hacsak a függvényben a mező azonosítóját is nem vizsgálod. Ha a mezőt a kosárból teljesen el akarod tüntetni, az előző pontban leírt típus-elrejtés egyszerűbb.

## Szám mező értékének megjelenítése árként

A szám mező értékét a kosárban alapból sima számként látod. Ha az érték valójában pénzösszeg, formázhatod a WooCommerce árformátumával (`wc_price()`), így a kosárban például „1 500 Ft” látszik. Ehhez is a `pewc_filter_item_value_in_cart` szűrő kell, a mező azonosítójának és típusának vizsgálatával:

```php
function pelda_szam_mezo_ar_formatumban( $ertek, $elem ) {
    if ( isset( $elem['field_id'] ) && 1047 === (int) $elem['field_id'] && 'number' === $elem['type'] ) {
        $ertek = wc_price( $ertek );
    }
    return $ertek;
}
add_filter( 'pewc_filter_item_value_in_cart', 'pelda_szam_mezo_ar_formatumban', 10, 2 );
```

Az `1047` helyére a saját szám meződ azonosítóját írd. Az azonosítót a mező szerkesztőjében látod. A függvény csak ezt az egy mezőt érinti.

## Feltöltött képek bélyegképei a kosárban és a rendelésben

Ha a vásárló képet tölt fel, a kosárban és a rendelés oldalán a kép kicsinyített változata is megjelenik. Ha csak a fájl hivatkozását szeretnéd mutatni, két szűrővel kapcsolhatod ki a bélyegképet:

```php
// Csak hivatkozás a kosárban, kép nélkül
add_filter( 'pewc_show_link_only_cart', '__return_true' );

// Bélyegkép nélkül a rendelés oldalán
add_filter( 'pewc_remove_thumbs_in_order_page', '__return_true' );
```

A két sort külön is használhatod: ha csak az elsőt adod meg, a kosárban hivatkozás lesz, a rendelésben viszont marad a bélyegkép.

## Szállítási osztály módosítása egy kiegészítő alapján

Ha egy kiegészítő mező kitöltése más szállítási díjat igényel (például a csomagolt termék nagyobb), a kosár összegzése előtt átállíthatod a termék szállítási osztályát. A példa a `woocommerce_before_calculate_totals` horogra kapcsolódik: végigmegy a kosár tételein, és ha a megadott mezők valamelyike nem üres, a termékre a megadott szállítási osztályt állítja.

```php
function pelda_szallitasi_osztaly_kiegeszito_alapjan( $kosar ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }

    $mezo_azonositok = array( 26, 27 );
    $osztaly_slug    = 'nagy-csomag';

    $osztaly = get_term_by( 'slug', $osztaly_slug, 'product_shipping_class' );
    if ( ! $osztaly ) {
        return;
    }

    foreach ( $kosar->get_cart() as $tetel ) {
        if ( empty( $tetel['product_extras']['groups'] ) ) {
            continue;
        }
        foreach ( $tetel['product_extras']['groups'] as $csoportok ) {
            foreach ( $csoportok as $mezo ) {
                if ( in_array( (int) $mezo['field_id'], $mezo_azonositok, true ) && ! empty( $mezo['value'] ) ) {
                    $tetel['data']->set_shipping_class_id( $osztaly->term_id );
                    break 3;
                }
            }
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'pelda_szallitasi_osztaly_kiegeszito_alapjan', 20 );
```

Beállítanivalók a kódban:

| Érték | Mit csinál |
|---|---|
| `$mezo_azonositok` | Azoknak a kiegészítő mezőknek az azonosítója, amelyeket a kód vizsgál. |
| `$osztaly_slug` | A WooCommerce-ben már létező szállítási osztály url-neve (slug). Ha nincs ilyen, a kód nem csinál semmit. |
| `! empty( $mezo['value'] )` | Alapból bármilyen kitöltött érték elég. Ha csak egy adott érték számít, cseréld erre: `$mezo['value'] === 'valami'`. |

A kód csak akkor állítja át az osztályt, ha van találat, a mező kiürítésekor nem állítja vissza az eredetit. Éles webhelyen használat előtt próbáld ki egy tesztkosárral, amelyben szerepel egyező és nem egyező termék is.
