Clasa EDD\Fees\Handler poate fi folosită pentru a adăuga taxe arbitrare la coșul de cumpărături, atât pozitive, cât și negative (reducere). De exemplu, puteți adăuga o taxă specială de 10% reducere automat pentru toți utilizatorii înregistrați care au un anumit rol de utilizator, sau puteți adăuga o taxă de „gestionare” pentru toate produsele dintr-o anumită categorie. Opțiunile sunt nelimitate.
Taxele sunt stocate ca variabile de sesiune, ceea ce înseamnă că odată ce sunt setate pentru un utilizator, acestea vor persista până când utilizatorul finalizează achiziția sau sunt eliminate de către un cod bazat pe o decizie sau setare.
Tipuri de taxe
Taxele pot avea două tipuri:
fee: Acesta este exact ceea ce sună – un cost suplimentar sau o reducere adăugată la întreaga achiziție.item: Aceasta este o taxă care nu este asociată cu nimic altceva. Gândiți-vă la ea ca la un produs temporar creat pe loc. Depozitele în portofel sunt un exemplu de acest tip de taxă.
Notă: taxele negative setează întotdeauna no_tax la true.
add_fee()
Adăugarea unei cheltuieli sau acordarea unei reduceri sunt ambele considerate adăugări de taxe, în ciuda faptului că una dintre ele implică retragerea de bani.
Adăugarea unei taxe se face cu cod similar cu acesta:
function eddwp_set_admin_discount() {
// Check to see the customer is a site admin.
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
// find 20% of the total
$amount = edd_get_cart_subtotal() * 0.20;
// Flip the 20% from a positive number to a negative number
$amount = $amount * -1;
// Add the fee, sending the amount, the reason printed to the front end, and the handle
EDD()->fees->add_fee(
array(
'price_id' => null, // set this to link the fee to a specific price ID.
'amount' => $amount,
'label' => 'You are an admin special!',
'id' => 'admin_special',
'type' => 'fee',
'no_tax' => false,
'download_id' => 0, // set this to link the fee to a specific product.
)
);
}
add_action( 'template_redirect', 'eddwp_set_admin_discount' );
Acest exemplu adaugă automat o reducere de 20% dacă utilizatorul curent este un administrator.
Iată un alt exemplu care adaugă o taxă de gestionare:
function eddwp_add_handling_fee() {
// Add a $10 handling fee no matter what
EDD()->fees->add_fee(
array(
'amount' => 10,
'label' => 'Handling fee',
'id' => 'handling_fee',
'type' => 'fee',
'no_tax' => false,
'download_id' => 0,
)
);
}
add_action( 'template_redirect', 'eddwp_add_handling_fee' );
Iată o captură de ecran cu ambele exemple de mai sus aplicate în același timp: 
remove_fee()
Pentru a elimina o taxă, pur și simplu transmiteți ID-ul taxei (al treilea parametru de mai sus) la metoda remove_fee():
function pw_remove_handling_fee() {
EDD()->fees->remove_fee( 'handling_fee' );
}
add_action( 'template_redirect', 'pw_remove_handling_fee', 9999 );
Alte Metode
Pe lângă adăugarea și eliminarea simplă a taxelor, există o serie de metode pentru lucrul cu taxele în backend.
has_fees( string $type = ‘fee’ )
Această metodă verifică pur și simplu dacă există taxe. Implicit, verifică tipul de taxă, dar poate accepta și item.
Exemplu:
if ( EDD()->fees->has_fees() ) {
echo 'yep, we can haz fees!';
}
Returnează: true sau false.
get_fees( string $type = ‘fee’, integer $download_id = 0 )
Această metodă va obține un array cu toate taxele existente. Poate fi limitată după tip și/sau ID de descărcare.
Exemplu
Extensia Simple Shipping este un exemplu perfect al modului în care poate fi utilizată clasa EDD_Fees.
$fees = EDD()->fees->get_fees();
Returnează ceva de genul acesta:
Array
(
[handling_fee] => Array
(
[amount] => 11.00
[label] => Handling Fee
[type] => fee
[no_tax] =>
[download_id] => 0
[price_id] =>
)
[admin_special] => Array
(
[amount] => -2
[label] => You are an admin special!
[type] => fee
[no_tax] =>
[download_id] => 0
[price_id] =>
)
[tophers_fee] => Array
(
[amount] => 42.00
[label] => Topher's fee
[no_tax] =>
[type] => fee
[download_id] => 114
[price_id] =>
)
)
get_fee( string $id = ” )
Această metodă va obține un array al unei taxe specifice, identificată prin numele pe care i l-a fost dat la crearea sa.
Exemplu:
$my_custom_fee = EDD()->fees->get_fee( 'my_custom_fee' );
Returnează ceva de genul acesta:
Array
(
[amount] => 42.00
[label] => The Final Fee
[no_tax] =>
[type] => fee
[download_id] => 114
)
type_total( string $type = ‘fee’ )
Această metodă calculează totalul pentru un anumit tip de taxă. Tipurile suportate sunt ‘fee’ și ‘item’.
Exemplu:
$item_total = EDD()->fees->type_total( 'item' );
Returnează un număr ca 51.00
total( integer $download_id = 0 )
Această metodă calculează totalul pentru toate taxele SAU toate taxele atașate specific unui anumit download.
Notă: Dacă un produs are taxe și prețuri variabile, taxa va fi aplicată o singură dată per tranzacție, NU o dată per articol.
Exemplu:
$total = EDD()->fees->total(); $total = EDD()->fees->total( '42' );
În exemplul de mai sus, primul ar returna un număr precum 51,00 căruia este suma tuturor taxelor.
Al doilea exemplu ar returna un număr precum 51,00 căruia este suma tuturor taxelor legate specific de Download-ul cu ID-ul 42.
record_fees( array $payment_meta, array $payment_data )
Această metodă înregistrează informațiile despre taxă pentru o anumită tranzacție. Nu ar trebui să fie apelată niciodată direct.
