Přeskočit na obsah

Hooky a filtry

Plugin WPify Woo Podmínky dopravy a platby poskytuje filtry pro přizpůsobení výpočtů, pravidel a chování podmíněné dopravy a platby.

wpify_woo_conditional_shipping_cart_amount_include_tax

Section titled “wpify_woo_conditional_shipping_cart_amount_include_tax”

Ovládání, zda podmínky mezisoučtu košíku zahrnují nebo vylučují DPH.

apply_filters( 'wpify_woo_conditional_shipping_cart_amount_include_tax', bool $include_tax );

Výchozí: true (mezisoučet košíku zahrnuje DPH)

Příklad — počítat mezisoučet bez DPH:

/**
* Počítat mezisoučet košíku bez DPH pro podmínky dopravy
*/
add_filter( 'wpify_woo_conditional_shipping_cart_amount_include_tax', '__return_false' );

wpify_woo_conditional_shipping_cart_total_include_tax

Section titled “wpify_woo_conditional_shipping_cart_total_include_tax”

Ovládání, zda podmínky celkové hodnoty košíku zahrnují nebo vylučují DPH.

apply_filters( 'wpify_woo_conditional_shipping_cart_total_include_tax', bool $include_tax );

Výchozí: true (celková hodnota košíku zahrnuje DPH)

Příklad — počítat celkovou hodnotu bez DPH:

/**
* Počítat celkovou hodnotu košíku bez DPH pro podmínky dopravy
*/
add_filter( 'wpify_woo_conditional_shipping_cart_total_include_tax', '__return_false' );

wpify_woo_conditional_shipping_shipping_adjusted_price

Section titled “wpify_woo_conditional_shipping_shipping_adjusted_price”

Filtrování upravené ceny dopravy před jejím aplikováním.

apply_filters( 'wpify_woo_conditional_shipping_shipping_adjusted_price', $value, array $action, array $rule, array $passed_rules );

Parametry:

ParametrTypPopis
$valuefloatUpravená cena dopravy
$actionarrayKonfigurace akce
$rulearraySkupina pravidel, která odpovídala
$passed_rulesarrayVšechna pravidla, která prošla podmínkami

Příklad — minimální cena dopravy:

/**
* Nastavení minimální ceny dopravy na 29 Kč
*
* @param float $value Upravená cena
* @param array $action Akce
* @param array $rule Pravidlo
* @param array $passed_rules Všechna pravidla
* @return float
*/
function my_minimum_shipping_price( $value, $action, $rule, $passed_rules ) {
return max( $value, 29 );
}
add_filter( 'wpify_woo_conditional_shipping_shipping_adjusted_price', 'my_minimum_shipping_price', 10, 4 );

wpify_woo_conditional_shipping_passed_rules

Section titled “wpify_woo_conditional_shipping_passed_rules”

Filtrování pravidel, která prošla všemi podmínkami, před aplikováním akcí.

apply_filters( 'wpify_woo_conditional_shipping_passed_rules', array $rules, string $rules_id, Context $context );

Parametry:

ParametrTypPopis
$rulesarrayPole pravidel, která prošla všemi podmínkami
$rules_idstringIdentifikátor sady pravidel (rules nebo payment_rules)
$contextContextZdroj vyhodnocovaných dat: košík, objednávka na stránce platby objednávky, nebo produkt v API pro cenu dopravy produktu

Filtr běží i pro API ceny dopravy produktu, kde košík neexistuje — callbacky se nesmí spoléhat na WC()->cart. U produktu se pravidla filtrují před vyhodnocením podmínek „zvolená doprava“.

Příklad — logování pravidel pro debugging:

/**
* Logování pravidel, která prošla podmínkami
*
* @param array $rules Pravidla
* @param string $rules_id Identifikátor sady pravidel
* @return array
*/
function my_log_passed_rules( $rules, $rules_id ) {
$logger = wc_get_logger();
$logger->debug( sprintf(
'Pravidla %s: %d pravidel prošlo podmínkami',
$rules_id,
count( $rules )
), [ 'source' => 'conditional-shipping-debug' ] );
return $rules;
}
add_filter( 'wpify_woo_conditional_shipping_passed_rules', 'my_log_passed_rules', 10, 2 );

Nastavení priority filtru woocommerce_package_rates.

apply_filters( 'wpify_conditional_shipping_rules_priority', int $priority );

Výchozí: 1000

Příklad — spustit pravidla dříve:

/**
* Spustit pravidla dopravy dříve (nižší číslo = vyšší priorita)
*
* @param int $priority Priorita
* @return int
*/
function my_shipping_rules_priority( $priority ) {
return 100;
}
add_filter( 'wpify_conditional_shipping_rules_priority', 'my_shipping_rules_priority' );

wpify_woo_conditional_shipping_enable_negative_fee_fix

Section titled “wpify_woo_conditional_shipping_enable_negative_fee_fix”

Povolení nebo zakázání opravy výpočtu DPH pro záporné poplatky (slevy).

apply_filters( 'wpify_woo_conditional_shipping_enable_negative_fee_fix', bool $enable );

Výchozí: true

Příklad — zakázat opravu DPH:

/**
* Zakázat opravu DPH záporných poplatků
*/
add_filter( 'wpify_woo_conditional_shipping_enable_negative_fee_fix', '__return_false' );

Filtrování definic polí pravidel dopravy. Umožňuje přidání vlastních typů podmínek nebo úpravu existujících.

apply_filters( 'wpify_woo_conditional_shipping_rules', array $shipping_rules );

wpify_woo_conditional_shipping_payment_rules

Section titled “wpify_woo_conditional_shipping_payment_rules”

Filtrování definic polí pravidel platby.

apply_filters( 'wpify_woo_conditional_shipping_payment_rules', array $payment_rules );

Cenu dopravy s vašimi pravidly lze spočítat pro jeden produkt mimo košík — například pro zobrazení ceny dopravy na detailu produktu nebo pro export do produktového feedu. Výpočet použije metody dopravy WooCommerce z odpovídající zóny (včetně dopravy zdarma s minimální částkou objednávky), uplatní pravidla dopravy a nikdy nečte ani nemění košík a relaci zákazníka.

Modul získáte z kontejneru pluginu:

$module = wpify_woo_conditional_shipping_container()->get( \WpifyWooConditionalShipping\Modules\WpifyWooConditionalShipping\WpifyWooConditionalShippingModule::class );
MetodaVrací
get_product_shipping_rates( WC_Product $product, array $args = [] )WC_Shipping_Rate[] podle ID sazby (např. flat_rate:4). Metoda skrytá pravidlem nebo pro produkt nedostupná ve výsledku chybí.
get_products_shipping_rates( WC_Product[] $products, array $args = [] )Sazby pro více produktů najednou podle ID produktu. Použijte pro feedy — načte termy produktů jedním dotazem.
get_product_payment_fees( WC_Product $product, array $args = [] )Poplatky z pravidel plateb pro $args['payment']: [ [ 'label' => string, 'amount' => float, 'tax' => float ] ].
get_rate_total( WC_Shipping_Rate $rate )Cena sazby včetně DPH (float).

Variabilní produkt se počítá za výchozí variantu, pokud je skladem, jinak za nejlevnější variantu skladem. Virtuální produkt nemá žádné sazby.

KlíčTypVýchozíPopis
countrystringzemě doručení zákazníka, jinak země obchoduCílová země (ISO kód, např. CZ)
state, postcodestringjako countryKraj a PSČ doručení
quantityint1Počet kusů produktu
paymentstringžádnáID platební brány pro podmínky plateb a poplatky (např. cod)
shippingstringžádnáID sazby, která se počítá jako zvolená doprava u pravidel plateb s podmínkou dopravy (jen poplatky)
userWP_User|int|nullpřihlášený uživatelUživatel pro podmínky rolí. Ve feedech a cronu předejte null.
methodsint[]všechny metody zónyOmezí výpočet na tato ID instancí metod dopravy

Podmínky, které potřebují košík, se vyhodnotí jen pro produkt: částka a celkem košíku = cena produktu × počet kusů, žádné kupóny a podmínka „zvolená doprava“ bere jako zvolenou právě počítanou sazbu.

Příklad — ceny dopravy na detailu produktu:

/**
* Zobrazení cen dopravy pod souhrnem produktu
*/
function my_product_shipping_prices() {
global $product;
if ( ! function_exists( 'wpify_woo_conditional_shipping_container' ) || ! $product ) {
return;
}
$module = wpify_woo_conditional_shipping_container()->get( \WpifyWooConditionalShipping\Modules\WpifyWooConditionalShipping\WpifyWooConditionalShippingModule::class );
foreach ( $module->get_product_shipping_rates( $product ) as $rate ) {
printf( '<p>%s: %s</p>', esc_html( $rate->get_label() ), wc_price( $module->get_rate_total( $rate ) ) );
}
}
add_action( 'woocommerce_single_product_summary', 'my_product_shipping_prices', 25 );

Příklad — cena dopravy na dobírku pro feed:

$args = [ 'country' => 'CZ', 'methods' => [ 4 ], 'user' => null ];
$rates = $module->get_products_shipping_rates( $products, $args );
foreach ( $products as $product ) {
$rate = $rates[ $product->get_id() ]['flat_rate:4'] ?? null;
if ( ! $rate ) {
continue; // Metoda není pro tento produkt dostupná.
}
$price = $module->get_rate_total( $rate );
$fees = $module->get_product_payment_fees( $product, $args + [ 'payment' => 'cod', 'shipping' => 'flat_rate:4' ] );
$cod = $price + array_sum( array_map( fn( $fee ) => $fee['amount'] + $fee['tax'], $fees ) );
}

wpify_woo_conditional_shipping_product_rate_methods

Section titled “wpify_woo_conditional_shipping_product_rate_methods”

Filtr metod dopravy použitých pro výpočet u produktu. Slouží k vynechání metody, kterou nelze spočítat mimo košík (např. dopravce volající externí API).

apply_filters( 'wpify_woo_conditional_shipping_product_rate_methods', WC_Shipping_Method[] $methods, WC_Product $product, array $args );

Příklad — vynechání dopravce:

function my_product_rate_methods( $methods, $product, $args ) {
return array_filter( $methods, fn( $method ) => 'my_carrier' !== $method->id );
}
add_filter( 'wpify_woo_conditional_shipping_product_rate_methods', 'my_product_rate_methods', 10, 3 );

wpify_woo_conditional_shipping_product_base_rates

Section titled “wpify_woo_conditional_shipping_product_base_rates”

Filtr sazeb WooCommerce u produktu před uplatněním pravidel dopravy. Pluginy pro více měn (např. WCML) převádějí ceny dopravy jen v košíku, převod měny pro výpočet u produktu proto patří sem. Callback musí vracet objekty WC_Shipping_Rate.

apply_filters( 'wpify_woo_conditional_shipping_product_base_rates', WC_Shipping_Rate[] $rates, WC_Product $product, array $args );

Způsob dopravy, který vyhodí výjimku, se přeskočí. Daň se vždy počítá z produktu — vlastní daně způsobu dopravy se nepoužijí.

Vlastní funkci můžete vložit buď do tzv. child šablony nebo pomocí pluginu Code Snippets.