# Beküldések automatikus törlése

> Hogyan töröltesd vagy tedd a kukába a régi beküldéseket a megőrzési szabállyal, és hogyan szabhatod testre kóddal.

A Gravity Forms a személyes adatok beállításai között képes a régi beküldéseket automatikusan törölni. Ez a beküldésekre és a „Mentés és folytatás” piszkozatokra is vonatkozik. Két módszer van: a kód nélküli megőrzési szabály, és a kóddal vezérelt törlés.

## Megőrzési szabály beállítása

1. Nyisd meg az űrlapot, majd az űrlap beállításai között válaszd a **Személyes adatok** oldalt.
2. A megőrzési szabály résznél válassz műveletet:
   - **Beküldések automatikus áthelyezése a kukába**: a megadott napszám után a beküldés a kukába kerül. Biztonságosabb, mert még visszaállíthatod.
   - **Beküldések automatikus végleges törlése**: a beküldés és a hozzá tartozó fájlok véglegesen eltűnnek az adatbázisból és a szerverről. Nem vonható vissza.
3. Add meg a napok számát, és mentsd a beállítást.

![Az űrlap személyes adatok beállításai a megőrzési szabállyal](./kepek/beallitasok-1-szemelyes-adatok.webp)

*Az űrlap személyes adatok beállításai a megőrzési szabállyal* (https://minta-bolt.hu/wp-admin/admin.php?page=gf_edit_forms&view=settings&subview=personal-data&id=14)

A képen a megőrzési szabály és az IP-cím tárolását tiltó beállítás helye látszik.

A legkisebb megadható érték egy nap, hogy a beküldés feldolgozása biztosan befejeződjön a törlés előtt. A napok száma legalább ennyit jelent, nem pontos időpontot.

## Tudnivalók

- **Időzítés:** a takarítás a napi WordPress-cron feladattal fut, ezért egy lejárt beküldés akár 24 óráig is látszhat.
- **Piszkozatok:** a „Mentés és folytatás” részleges beküldéseit ugyanígy törli a rendszer.
- **Adatminimalizálás:** ha az a célod, hogy kevesebb személyes adat maradjon, kapcsold be ugyanitt az IP-címek tárolásának tiltását is. Így az IP-cím el sem kerül az adatbázisba.

## Törlés kóddal

Ha a beépített szabály nem elég (például a csillagozott beküldéseket meg akarod tartani), három lehetőséged van.

### A napi törlés listájának módosítása

A `gform_entry_ids_automatic_deletion` szűrő megkapja a törlésre ítélt azonosítókat, és kivehetsz belőlük. A példa megőrzi a csillagozott beküldéseket:

```php
add_filter( 'gform_entry_ids_automatic_deletion', 'filter_rescue_starred_entries' );
function filter_rescue_starred_entries( $entry_ids ) {
    $ids_to_delete = array();

    foreach ( $entry_ids as $entry_id ) {
        $entry = GFAPI::get_entry( $entry_id );

        if ( is_wp_error( $entry ) ) {
            continue;
        }

        // Csak a nem csillagozott beküldések maradnak a törlendők között.
        if ( ! $entry['is_starred'] ) {
            $ids_to_delete[] = $entry_id;
        } else {
            GFCommon::log_debug( 'Megmentett csillagozott beküldés: ' . $entry_id );
        }
    }

    return $ids_to_delete;
}
```

### A fájlok törlésének tiltása

Alapból a beküldés végleges törlésekor a hozzá tartozó fájlok is törlődnek. Ha a fájlokat meg akarod tartani, a `gform_field_types_delete_files` szűrő adjon vissza üres tömböt. Ez minden űrlapra érvényes:

```php
add_filter( 'gform_field_types_delete_files', '__return_empty_array' );
```

### Beküldés törlése közvetlenül a beküldés után

Alapból a Gravity Forms minden beküldött adatot rögzít. A beküldéseket el kell menteni, hogy az értesítések elmenjenek, és a feed-alapú kiegészítők (például a PayPal vagy a Felhasználó regisztráció) feldolgozhassák őket. Ezért jelenleg nincs beépített beállítás, amely megakadályozná a beküldés létrehozását. A megőrzési szabály az ajánlott megoldás az automatikus takarításhoz és a rövid ideig tartó megőrzéshez.

Ha a beküldést közvetlenül a létrejötte után kell törölni, használhatsz külső kiegészítőt (például a Gravity Flow Form Connector Extension, a Gravity Wiz Disable Entry Creation vagy a CosmicGiant Entry Automation, illetve a PluginOwl titkosított mezői). Ezeket a Gravity Forms nem teszteli és hivatalosan nem támogatja.

Külső megoldás helyett egyedi kóddal is megoldhatod: a kód megvárja, amíg az adat rögzül, majd törli az éppen létrejött beküldést. A `gform_after_submission_1` végén lévő 1 az űrlap azonosítója; ha minden űrlapra érvényes legyen, használd a `gform_after_submission` nevet.

```php
add_action( 'gform_after_submission_1', 'remove_form_entry' );
function remove_form_entry( $entry ) {
    GFAPI::delete_entry( $entry['id'] );
}
```

A kódot a téma `functions.php` fájljába, saját funkcióbővítménybe, saját kiegészítőbe vagy kódrészlet-bővítménybe teheted ([Hová tedd a kódrészleteket?](https://hub.hellowp.io/hu/plugins/gravityforms/hogyan-hova-keruljon-a-kod/)). A várt eredmény, hogy a beküldés a beküldés után nem szerepel a Gravity Forms adatbázistábláiban. Ha a kód nem működik, nézd meg a `gform_after_submission` szűrő leírását. A régi, 1.7-es és korábbi kiadásoknál ugyanez a kód szerepelt.

### Törlés azonnal

Egyedi munkafolyamatnál egy beküldést a `GFAPI::delete_entry()` függvénnyel törölhetsz:

```php
$entry_id = 123;
$result = GFAPI::delete_entry( $entry_id );

if ( is_wp_error( $result ) ) {
    GFCommon::log_debug( 'A törlés nem sikerült: ' . $result->get_error_message() );
} else {
    GFCommon::log_debug( 'A(z) ' . $entry_id . ' azonosítójú beküldés törölve.' );
}
```
