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.
Filtry výpočtu košíku
Section titled “Filtry výpočtu košíku”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' );Filtry pravidel
Section titled “Filtry pravidel”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:
| Parametr | Typ | Popis |
|---|---|---|
$value | float | Upravená cena dopravy |
$action | array | Konfigurace akce |
$rule | array | Skupina pravidel, která odpovídala |
$passed_rules | array | Vš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:
| Parametr | Typ | Popis |
|---|---|---|
$rules | array | Pole pravidel, která prošla všemi podmínkami |
$rules_id | string | Identifikátor sady pravidel (rules nebo payment_rules) |
$context | Context | Zdroj 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 );wpify_conditional_shipping_rules_priority
Section titled “wpify_conditional_shipping_rules_priority”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' );Filtry oprav
Section titled “Filtry oprav”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' );Filtry nastavení
Section titled “Filtry nastavení”wpify_woo_conditional_shipping_rules
Section titled “wpify_woo_conditional_shipping_rules”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 );API pro cenu dopravy produktu
Section titled “API pro cenu dopravy produktu”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 );Metody
Section titled “Metody”| Metoda | Vrací |
|---|---|
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.
Argumenty
Section titled “Argumenty”| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
country | string | země doručení zákazníka, jinak země obchodu | Cílová země (ISO kód, např. CZ) |
state, postcode | string | jako country | Kraj a PSČ doručení |
quantity | int | 1 | Počet kusů produktu |
payment | string | žádná | ID platební brány pro podmínky plateb a poplatky (např. cod) |
shipping | string | žádná | ID sazby, která se počítá jako zvolená doprava u pravidel plateb s podmínkou dopravy (jen poplatky) |
user | WP_User|int|null | přihlášený uživatel | Uživatel pro podmínky rolí. Ve feedech a cronu předejte null. |
methods | int[] | všechny metody zóny | Omezí 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 );Známá omezení
Section titled “Známá omezení”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í.
Kde umístit kód
Section titled “Kde umístit kód”Vlastní funkci můžete vložit buď do tzv. child šablony nebo pomocí pluginu Code Snippets.