Die EDD\Fees\Handler Klasse kann verwendet werden, um dem Warenkorb beliebige Gebühren hinzuzufügen, sowohl positive als auch negative (Rabatt) Gebühren. Sie könnten zum Beispiel automatisch eine spezielle 10% Rabattgebühr für alle registrierten Benutzer mit einer bestimmten Benutzerrolle hinzufügen oder eine „Bearbeitungsgebühr“ für alle Produkte innerhalb einer bestimmten Kategorie hinzufügen. Die Möglichkeiten sind unbegrenzt.
Gebühren werden als Sitzungsvariablen gespeichert, was bedeutet, dass sie, sobald sie für einen Benutzer festgelegt sind, bestehen bleiben, bis der Benutzer entweder zur Kasse geht oder sie von Code basierend auf einer Entscheidung oder Einstellung entfernt werden.
Arten von Gebühren
Gebühren können zwei Arten haben:
fee: Dies ist genau das, wonach es klingt – zusätzliche Kosten oder ein Rabatt, der dem gesamten Kauf hinzugefügt wird.item: Dies ist eine Gebühr, die mit nichts anderem verbunden ist. Stellen Sie es sich wie ein temporäres Produkt vor, das spontan erstellt wird. Einzahlungen auf das Wallet sind ein Beispiel für diese Art von Gebühr.
Hinweis: negative Gebühren setzen immer no_tax auf true.
add_fee()
Das Hinzufügen einer Ausgabe oder das Gewähren eines Rabatts wird beides als Hinzufügen von Gebühren betrachtet, obwohl eines davon Geld abzieht.
Das Hinzufügen einer Gebühr erfolgt mit Code, der diesem ähnelt:
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' );
Dieses Beispiel fügt automatisch einen Rabatt von 20% hinzu, wenn der aktuelle Benutzer ein Administrator ist.
Hier ist ein weiteres Beispiel, das eine Bearbeitungsgebühr hinzufügt:
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' );
Here’s a screenshot of both of the above examples being applied at the same time: 
remove_fee()
Um eine Gebühr zu entfernen, übergeben Sie einfach die Gebühren-ID (dritter Parameter oben) an die Methode remove_fee():
function pw_remove_handling_fee() {
EDD()->fees->remove_fee( 'handling_fee' );
}
add_action( 'template_redirect', 'pw_remove_handling_fee', 9999 );
Andere Methoden
Zusätzlich zum einfachen Hinzufügen und Entfernen von Gebühren gibt es eine Reihe von Methoden zur Arbeit mit Gebühren im Backend.
has_fees( string $type = ‘fee’ )
Diese Methode prüft einfach, ob Gebühren vorhanden sind. Standardmäßig wird der Gebührentyp verwendet, es kann aber auch „item“ akzeptiert werden.
Beispiel:
if ( EDD()->fees->has_fees() ) {
echo 'yep, we can haz fees!';
}
Gibt zurück: true oder false.
get_fees( string $type = ‘fee’, integer $download_id = 0 )
Diese Methode gibt ein Array aller vorhandenen Gebühren zurück. Sie kann nach Typ und/oder Download-ID eingeschränkt werden.
Beispiel
Die Simple Shipping Erweiterung ist ein perfektes Beispiel dafür, wie die EDD_Fees Klasse verwendet werden kann.
$fees = EDD()->fees->get_fees();
Gibt etwas wie dieses zurück:
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 = ” )
Diese Methode gibt ein Array einer bestimmten Gebühr zurück, identifiziert durch den Namen, der ihr bei der Erstellung gegeben wurde.
Beispiel:
$my_custom_fee = EDD()->fees->get_fee( 'my_custom_fee' );
Gibt etwas wie dieses zurück:
Array
(
[amount] => 42.00
[label] => The Final Fee
[no_tax] =>
[type] => fee
[download_id] => 114
)
type_total( string $type = ‘fee’ )
Diese Methode berechnet die Gesamtsumme für einen bestimmten Gebührentyp. Die unterstützten Typen sind „fee“ und „item“.
Beispiel:
$item_total = EDD()->fees->type_total( 'item' );
Gibt eine Zahl wie 51,00 zurück
Gesamt( Integer $download_id = 0 )
Diese Methode berechnet die Gesamtsumme für alle Gebühren ODER alle Gebühren, die speziell an einen bestimmten Download angehängt sind.
Hinweis: Wenn ein Produkt Gebühren und variable Preise hat, wird die Gebühr nur einmal pro Transaktion angewendet, NICHT einmal pro Artikel.
Beispiel:
$total = EDD()->fees->total(); $total = EDD()->fees->total( '42' );
Im obigen Beispiel würde das erste eine Zahl wie 51,00 ergeben, die die Summe aller Gebühren ist.
Das zweite Beispiel würde eine Zahl wie 51,00 ergeben, die die Summe aller Gebühren ist, die speziell an den Download mit der ID 42 gebunden sind.
record_fees( array $payment_meta, array $payment_data )
Diese Methode zeichnet die Gebühreninformationen zu einer bestimmten Transaktion auf. Sie sollte niemals direkt aufgerufen werden.
