Zaloguj się
Rozpocznij

Dokumentacja Easy Digital Downloads

Dokumentacja, materiały referencyjne i samouczki dla Easy Digital Downloads 

EDD\Fees\Handler Klasa

Klasa EDD\Fees\Handler może być używana do dodawania dowolnych opłat do koszyka, zarówno dodatnich, jak i ujemnych (zniżka). Na przykład, możesz dodać specjalną 10% zniżkę automatycznie dla wszystkich zarejestrowanych użytkowników posiadających określone uprawnienia, lub dodać opłatę „obsługi” dla wszystkich produktów z określonej kategorii. Możliwości są nieograniczone.

Opłaty są przechowywane jako zmienne sesji, co oznacza, że raz ustawione dla użytkownika, pozostaną aktywne do momentu zakończenia zakupu lub usunięcia przez kod na podstawie decyzji lub ustawienia.

Rodzaje opłat

Opłaty mogą mieć dwa typy:

  • fee: To jest dokładnie to, co sugeruje nazwa – dodatkowy koszt lub zniżka dodana do całego zakupu.
  • item: Jest to opłata, która nie jest powiązana z niczym innym. Pomyśl o tym jak o tymczasowym produkcie stworzonym na bieżąco. Depozyty portfelowe są przykładem tego rodzaju opłaty.

Uwaga: opłaty ujemne zawsze ustawiają no_tax na true.

add_fee()

Dodawanie kosztu lub udzielanie zniżki są uważane za dodawanie opłat, mimo że jedno z nich polega na odejmowaniu pieniędzy.

Dodawanie opłaty odbywa się za pomocą kodu podobnego do tego:

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' );

Ten przykład automatycznie dodaje 20% zniżki, jeśli bieżący użytkownik jest administratorem.

Oto kolejny przykład dodający opłatę za obsługę:

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' );

Oto zrzut ekranu pokazujący oba powyższe przykłady zastosowane jednocześnie:

remove_fee()

Aby usunąć opłatę, po prostu przekaż identyfikator opłaty (trzeci parametr powyżej) do metody remove_fee():

function pw_remove_handling_fee() {
EDD()->fees->remove_fee( 'handling_fee' );
}
add_action( 'template_redirect', 'pw_remove_handling_fee', 9999 );

Inne metody

Oprócz prostego dodawania i usuwania opłat istnieje szereg metod do pracy z opłatami w backendzie.

has_fees( string $type = ‘fee’  )

Ta metoda po prostu sprawdza, czy istnieją jakiekolwiek opłaty.  Domyślnie sprawdza typ opłaty, ale może również przyjąć typ elementu.

Przykład:

if ( EDD()->fees->has_fees() ) {
	echo 'yep, we can haz fees!';
}

Zwraca: true lub false.

get_fees( string $type = ‘fee’, integer $download_id = 0  )

Ta metoda pobierze tablicę wszystkich istniejących opłat.  Można ją ograniczyć według typu i/lub identyfikatora pobierania.

Przykład

Rozszerzenie  Simple Shipping jest doskonałym przykładem tego, jak można wykorzystać klasę EDD_Fees.

$fees = EDD()->fees->get_fees();

Zwraca coś w tym stylu:

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 = ”  )

Ta metoda pobierze tablicę konkretnej opłaty, zidentyfikowanej przez nazwę, którą otrzymała podczas tworzenia.  

Przykład: 

$my_custom_fee = EDD()->fees->get_fee( 'my_custom_fee' );

Zwraca coś w tym stylu:

 Array
(
    [amount] => 42.00
    [label] => The Final Fee
    [no_tax] => 
    [type] => fee
    [download_id] => 114
)
type_total( string $type = ‘fee’  )

Ta metoda oblicza sumę dla określonego typu opłaty.  Obsługiwane typy to „fee” i „item”.

Przykład: 

$item_total = EDD()->fees->type_total( 'item' );

Zwraca liczbę, np. 51,00

total( integer $download_id = 0  )

Ta metoda oblicza całkowitą kwotę wszystkich opłat LUB wszystkich opłat przypisanych do konkretnego pobrania.

Uwaga: Jeśli produkt ma opłaty i zmienne ceny, opłata zostanie naliczona tylko raz na transakcję, NIE raz na produkt.

Przykład:

$total = EDD()->fees->total();

$total = EDD()->fees->total( '42' );

W powyższym przykładzie pierwsza zwróciłaby liczbę, np. 51,00, która jest sumą wszystkich opłat.

Drugi przykład zwróciłby liczbę, np. 51,00, która jest sumą wszystkich opłat powiązanych konkretnie z pobraniem o identyfikatorze 42.

record_fees( array $payment_meta, array $payment_data )

Ta metoda zapisuje informacje o opłatach dotyczące konkretnej transakcji.  Nigdy nie powinna być wywoływana bezpośrednio.

Czy ten artykuł był pomocny?

Zacznij sprzedawać już dziś!

Dołącz do ponad 50 000 sprytnych właścicieli sklepów i zacznij korzystać z najłatwiejszego sposobu sprzedaży produktów cyfrowych za pomocą WordPress.

Copyright © 2025 Sandhills Development, LLC

[universally_switcher]