<html lang="it-it" dir="ltr"><head></head><body># Classe Handler EDD\Fees

La classe `EDD\Fees\Handler` può essere utilizzata per aggiungere commissioni arbitrarie al carrello, sia **positive** che **negative** (sconto). Ad esempio, potresti aggiungere una commissione speciale di sconto del 10% automaticamente per tutti gli utenti registrati che hanno un certo ruolo utente, o aggiungere una commissione di "gestione" per tutti i prodotti all'interno di una certa categoria. Le opzioni sono illimitate.

Le commissioni vengono memorizzate come variabili di sessione, il che significa che una volta impostate per un utente, persisteranno finché l'utente non effettuerà il checkout o non verranno rimosse da qualche codice basato su una decisione o impostazione.

### Tipi di commissioni

Le commissioni possono avere due tipi:

- `fee`: Questo è esattamente ciò che sembra: un costo aggiuntivo o uno sconto aggiunto all'intero acquisto.
- `item`: Questa è una commissione che non è associata a nient'altro. Pensala come un prodotto temporaneo creato al momento. I depositi del portafoglio sono un esempio di questo tipo di commissione.

**Nota:** le commissioni negative impostano *sempre* no\_tax su true.

### add\_fee()

Aggiungere una spesa o dare uno sconto sono entrambi considerati aggiunte di commissioni, nonostante il fatto che uno di essi rimuova denaro.

Aggiungere una commissione si fa con codice simile a questo:

```
function eddwp_set_admin_discount() {&lt;br&gt;&lt;/br&gt;	// Controlla se il cliente è un amministratore del sito.&lt;br&gt;&lt;/br&gt;	if ( ! current_user_can( 'manage_options' ) ) {&lt;br&gt;&lt;/br&gt;		return;&lt;br&gt;&lt;/br&gt;	}&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;	// Trova il 20% del totale&lt;br&gt;&lt;/br&gt;	$amount = edd_get_cart_subtotal() * 0.20;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;	// Trasforma il 20% da un numero positivo a un numero negativo&lt;br&gt;&lt;/br&gt;	$amount = $amount * -1;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;	// Aggiungi la commissione, inviando l'importo, l'etichetta stampata sul frontend e l'handle&lt;br&gt;&lt;/br&gt;	EDD()-&gt;fees-&gt;add_fee(&lt;br&gt;&lt;/br&gt;		array(&lt;br&gt;&lt;/br&gt;			'price_id'    =&gt; null, // imposta questo per collegare la commissione a un ID prezzo specifico.&lt;br&gt;&lt;/br&gt;			'amount'      =&gt; $amount,&lt;br&gt;&lt;/br&gt;			'label'       =&gt; 'Sei uno speciale amministratore!',&lt;br&gt;&lt;/br&gt;			'id'          =&gt; 'admin_special',&lt;br&gt;&lt;/br&gt;			'type'        =&gt; 'fee',&lt;br&gt;&lt;/br&gt;			'no_tax'      =&gt; false,&lt;br&gt;&lt;/br&gt;			'download_id' =&gt; 0, // imposta questo per collegare la commissione a un prodotto specifico.&lt;br&gt;&lt;/br&gt;		)&lt;br&gt;&lt;/br&gt;	);&lt;br&gt;&lt;/br&gt;}&lt;br&gt;&lt;/br&gt;add_action( 'template_redirect', 'eddwp_set_admin_discount' );&lt;br&gt;&lt;/br&gt;
```

Questo esempio aggiunge automaticamente uno sconto del 20% se l'utente corrente è un amministratore.

Ecco un altro esempio che aggiunge una commissione di gestione:

```
function eddwp_add_handling_fee() {&lt;br&gt;&lt;/br&gt;	// Aggiungi una commissione di gestione di $10, qualunque cosa accada&lt;br&gt;&lt;/br&gt;	EDD()-&gt;fees-&gt;add_fee(&lt;br&gt;&lt;/br&gt;		array(&lt;br&gt;&lt;/br&gt;			'amount'      =&gt; 10,&lt;br&gt;&lt;/br&gt;			'label'       =&gt; 'Commissione di gestione',&lt;br&gt;&lt;/br&gt;			'id'          =&gt; 'handling_fee',&lt;br&gt;&lt;/br&gt;			'type'        =&gt; 'fee',&lt;br&gt;&lt;/br&gt;			'no_tax'      =&gt; false,&lt;br&gt;&lt;/br&gt;			'download_id' =&gt; 0,&lt;br&gt;&lt;/br&gt;		)&lt;br&gt;&lt;/br&gt;	);&lt;br&gt;&lt;/br&gt;}&lt;br&gt;&lt;/br&gt;add_action( 'template_redirect', 'eddwp_add_handling_fee' );&lt;br&gt;&lt;/br&gt;
```

Ecco uno screenshot di entrambi gli esempi precedenti applicati contemporaneamente: ![](https://easydigitaldownloads.com/wp-content/uploads/2022/07/6184cc919c3ad.png)

### remove\_fee()

Per rimuovere una commissione, basta passare l'ID della commissione (terzo parametro sopra) al metodo remove\_fee():

```
function pw_remove_handling_fee() {&lt;br&gt;&lt;/br&gt;	EDD()-&gt;fees-&gt;remove_fee( 'handling_fee' );&lt;br&gt;&lt;/br&gt;}&lt;br&gt;&lt;/br&gt;add_action( 'template_redirect', 'pw_remove_handling_fee', 9999 );&lt;br&gt;&lt;/br&gt;
```

### Altri Metodi

Oltre ad aggiungere e rimuovere semplicemente commissioni, ci sono una serie di metodi per lavorare con le commissioni sul backend.

##### has\_fees( string $type = 'fee' )

Questo metodo controlla semplicemente se esistono commissioni. Predefinito al tipo di commissione, ma può accettare anche 'item'.

Esempio:

```
if ( EDD()-&gt;fees-&gt;has_fees() ) {
	echo 'sì, possiamo avere commissioni!';
}
```

Restituisce: true o false.

##### get\_fees( string $type = 'fee', integer $download\_id = 0 )

Questo metodo otterrà un array di tutte le commissioni esistenti. Può essere limitato per tipo e/o ID download.

Esempio

L'estensione [Simple Shipping](https://easydigitaldownloads.com/extension/simple-shipping/) è un perfetto esempio di come può essere utilizzata la classe EDD\_Fees.

```
$fees = EDD()-&gt;fees-&gt;get_fees();
```

Restituisce qualcosa di simile a questo:

```
Array
(
    [handling_fee] =&gt; Array
        (
            [amount]      =&gt; 11.00
            [label]       =&gt; Commissione di gestione
            [type]        =&gt; fee
            [no_tax]      =&gt; 
            [download_id] =&gt; 0
            [price_id]    =&gt;
        )

    [admin_special] =&gt; Array
        (
            [amount]      =&gt; -2
            [label]       =&gt; Sei uno speciale amministratore!
            [type]        =&gt; fee
            [no_tax]      =&gt; 
            [download_id] =&gt; 0
            [price_id]    =&gt;
        )

    [tophers_fee] =&gt; Array
        (
            [amount]      =&gt; 42.00
            [label]       =&gt; Commissione di Topher
            [no_tax]      =&gt; 
            [type]        =&gt; fee
            [download_id] =&gt; 114
            [price_id]    =&gt;
        )

)
```

##### get\_fee( string $id = '' )

Questo metodo otterrà un array di una commissione specifica, identificata dal nome che le è stato dato quando è stata creata.

Esempio:

```
$my_custom_fee = EDD()-&gt;fees-&gt;get_fee( 'my_custom_fee' );
```

Restituisce qualcosa di simile a questo:

```
 Array
(
    [amount] =&gt; 42.00
    [label] =&gt; L'ultima commissione
    [no_tax] =&gt; 
    [type] =&gt; fee
    [download_id] =&gt; 114
)
```

##### type\_total( string $type = 'fee' )

Questo metodo calcola il totale per un tipo specifico di commissione. I tipi supportati sono 'fee' e 'item'.

Esempio:

```
$item_total = EDD()-&gt;fees-&gt;type_total( 'item' );
```

Restituisce un numero come 51.00

##### total( integer $download\_id = 0 )

Questo metodo calcola il totale per tutte le commissioni O tutte le commissioni specificamente collegate a un dato download.

**Nota:** Se un prodotto ha commissioni e prezzi variabili, la commissione verrà applicata solo una volta per transazione, NON una volta per articolo.

Esempio:

```
$total = EDD()-&gt;fees-&gt;total();

$total = EDD()-&gt;fees-&gt;total( '42' );
```

Nell'esempio sopra, il primo restituirebbe un numero come 51.00 che è la somma di tutte le commissioni.

Il secondo esempio restituirebbe un numero come 51.00 che è la somma di tutte le commissioni legate specificamente al Download con l'ID 42.

##### record\_fees( array $payment\_meta, array $payment\_data )

Questo metodo registra le informazioni sulle commissioni relative a una transazione specifica. Non dovrebbe mai essere chiamato direttamente.</body></html>