Přeskočit na obsah

Template systém

Tento obsah zatím není dostupný ve vašem jazyce.

Komplexní průvodce template systémem pluginu - jak upravovat šablony, používat hooky a filtry.

Plugin používá WordPressTemplates systém z wpify/templates pro renderování všech front-end prvků.

Hlavní výhody:

  • Šablony lze přepsat v tématu (child-theme compatible)
  • Každá šablona obsahuje hooky pro rozšíření
  • Data lze filtrovat před renderováním
  • WordPress standardní API (get_template_part(), load_template())

Plugin obsahuje tyto šablony v templates/ složce:

Účel: Wrapper pro discount info bloky na produktových stránkách.

Použití: Zobrazuje pricing tabulky a zprávy o slevách na produktové stránce.

Argumenty:

$args = [
'items' => [], // Array of items with 'rule', 'content', 'pricing'
'product' => WC_Product, // Product object
'classes' => [
'block' => ['wpify-woo-discount-info-block'],
'item' => ['wpify-woo-discount-info-block__item'],
'content' => ['wpify-woo-discount-info-block__content'],
'pricing' => ['wpify-woo-discount-info-block__pricing'],
],
];

Hooky v šabloně:

  • wpify_woo_discounts_info_block_html_start - Na začátku bloku
  • wpify_woo_discounts_info_block_html_item_start - Na začátku každé položky
  • wpify_woo_discounts_info_block_html_item_before_pricing - Před pricing tabulkou
  • wpify_woo_discounts_info_block_html_item_end - Na konci každé položky
  • wpify_woo_discounts_info_block_html_end - Na konci bloku

Účel: Cenová tabulka pro Bulk/Bundle slevy.

Použití: Zobrazuje tabulku “Kup víc, plať méně”.

Argumenty:

$args = [
'classes' => ['wpify-woo-discount-table'], // Table CSS classes
'header' => ['Množství', 'Cena'], // Header labels
'body' => [
['3-5 ks', '100 Kč'],
['6-10 ks', '90 Kč'],
], // Rows with cells
];

Hooky: Žádné (pure presentational template).


Účel: Wrapper pro Manual Select výběr produktů (dárky, BOGO).

Použití: Zobrazuje seznam produktů k výběru v košíku.

Argumenty:

$args = [
'rule' => [], // Rule configuration
'data' => [], // Display data (classes, labels, etc.)
'component_id' => 'unique-id', // Unique component ID
'available_products' => [], // Available products for selection
'rule_type' => 'free_gift', // Rule type
'rule_id' => '123', // Rule ID
];

Hooky v šabloně:

  • wpify_woo_discounts_selection_html_before_list - Před seznamem produktů
  • wpify_woo_discounts_selection_html_list_start - Na začátku seznamu
  • wpify_woo_discounts_selection_html_item - Pro každý produkt (vykresluje selection-item.php)
  • wpify_woo_discounts_selection_html_list_end - Na konci seznamu
  • wpify_woo_discounts_selection_html_after_list - Za seznamem produktů

Účel: Jedna položka v Manual Select seznamu.

Použití: Zobrazuje jeden produkt s tlačítkem “Vybrat”.

Argumenty:

$args = [
'item_data' => [], // Item data (classes, stock status, button label, etc.)
'product' => WC_Product, // Product object
'rule' => [], // Rule configuration
'image_html' => '<img...>', // Prepared image HTML
'price_data' => [
'original_price' => 100,
'discounted_price' => 80,
'discount_amount' => 20,
],
];

Hooky v šabloně:

  • wpify_woo_discounts_selection_html_item_start - Na začátku položky
  • wpify_woo_discounts_selection_html_item_content_start - Na začátku obsahu
  • wpify_woo_discounts_selection_html_item_details_start - Na začátku detailů
  • wpify_woo_discounts_selection_html_item_details_end - Na konci detailů
  • wpify_woo_discounts_selection_html_item_before_form - Před formulářem
  • wpify_woo_discounts_selection_html_item_content_end - Na konci obsahu
  • wpify_woo_discounts_selection_html_item_end - Na konci položky

Účel: Progress bar s motivací k vyššímu nákupu.

Použití: Zobrazuje progress bar v košíku/pokladně.

Argumenty:

$args = [
'bar' => [], // Bar configuration
'index' => 0, // Bar index
'data' => [
'additional_classes' => [], // Custom classes
'is_single' => false, // Single or multi mode
'first_goal_icon_html' => '<svg...>', // Icon for single mode
'message' => 'Add $50 more...', // Current message
'goals_data' => [], // Goals with progress data
],
'progress' => [], // Progress data
];

Hooky: Žádné (uses filters instead, see below).


Účel: Zobrazení přehledu úspor v košíku/pokladně (mimo tabulku).

Použití: Zobrazuje seznam aplikovaných slev a celkovou částku úspor jako blok.

Argumenty:

$args = [
'tracking' => [], // Discount tracking data
'total_saved' => 0, // Total saved amount (float)
'labels' => [], // Array of discount labels (strings)
'show_labels' => true, // Whether to display labels
'show_value' => true, // Whether to display saved value
];

Hooky v šabloně:

  • wpify_woo_discounts_savings_summary_start - Na začátku bloku
  • wpify_woo_discounts_savings_summary_end - Na konci bloku

Shortcode:

[wpify_discounts_savings_summary]

Shortcode vykreslí kompletní blok včetně fragment wrapperu pro AJAX aktualizace.

Fragment podpora: Šablona obsahuje CSS třídu wpify-woo-savings-summary-fragment pro WooCommerce AJAX fragment replacement. Wrapper se vykresluje vždy (i prázdný), aby fragmenty fungovaly správně.

Block cart podpora: Plugin automaticky injektuje savings summary do WooCommerce block košíku pomocí Store API extension a render_block filtru.


Účel: Zobrazení přehledu úspor jako řádek v tabulce součtů košíku.

Použití: Zobrazuje úspory přímo v tabulce cart totals (hook woocommerce_cart_totals_after_order_total).

Argumenty:

$args = [
'tracking' => [], // Discount tracking data
'total_saved' => 0, // Total saved amount (float)
'labels' => [], // Array of discount labels (strings)
'show_labels' => true, // Whether to display labels
'show_value' => true, // Whether to display saved value
];

Výstup:

<tr class="wpify-woo-savings-summary-row">
<th>Ušetřili jste</th>
<td>
<span class="wpify-woo-savings-summary__value">150 Kč</span>
<small class="wpify-woo-savings-summary__labels">(Zimní sleva, VIP)</small>
</td>
</tr>

Účel: CTA blok pro přidání produktu do košíku s kupónem.

Použití: Zobrazuje tlačítko “Přidat do košíku se slevou” na produktové stránce.

Modul: Coupons (volitelný modul)

Argumenty:

$args = [
'coupon' => [
'button_text' => 'Koupit za 199 Kč', // Text tlačítka
'coupon_code' => 'SLEVA20', // Kód kupónu
'discounted_price' => 199.00, // Cena po slevě
'url' => '...', // URL pro přidání
],
'title' => 'Speciální nabídka!', // Nadpis bloku
'url' => '...', // URL pro přidání do košíku
'product' => WC_Product, // Product object
];

Hooky v šabloně:

  • wpify_woo_discounts_coupon_block_html_start - Na začátku bloku
  • wpify_woo_discounts_coupon_block_html_end - Na konci bloku

Předdefinované styly: V nastavení modulu Coupons lze vybrat styl:

  • minimal - Jednoduchý světlý design
  • bordered - Ohraničený s přerušovanou čárou
  • shine - Barevný s animací
  • custom - Vlastní CSS (žádné výchozí styly)

Plugin používá WordPressTemplates třídu, která hledá šablony v tomto pořadí:

  1. Child theme - {child-theme}/wpify-woo-discount-rules/{template}.php
  2. Parent theme - {theme}/wpify-woo-discount-rules/{template}.php
  3. Plugin templates - {plugin}/templates/{template}.php

Příklad:

// Plugin volá:
$this->templates->print('info-block', null, $args);
// WordPress hledá v tomto pořadí:
// 1. wp-content/themes/my-child-theme/wpify-woo-discount-rules/info-block.php
// 2. wp-content/themes/my-theme/wpify-woo-discount-rules/info-block.php
// 3. wp-content/plugins/wpify-woo-discount-rules/templates/info-block.php

Krok 1: Vytvořte složku v tématu

Terminal window
wp-content/themes/your-theme/wpify-woo-discount-rules/

Krok 2: Zkopírujte šablonu z pluginu

Terminal window
cp wp-content/plugins/wpify-woo-discount-rules/templates/info-block.php \
wp-content/themes/your-theme/wpify-woo-discount-rules/info-block.php

Krok 3: Upravte šablonu dle potřeby


Soubor: your-theme/wpify-woo-discount-rules/info-block.php

<?php
/**
* Custom Info Block Template
*/
defined( 'ABSPATH' ) || exit;
$items = $args['items'] ?? [];
$product = $args['product'] ?? null;
?>
<div class="my-custom-discount-block">
<h3>Speciální nabídky!</h3>
<?php foreach ( $items as $item ) : ?>
<div class="my-custom-discount-item">
<?php if ( ! empty( $item['content'] ) ) : ?>
<div class="discount-message">
<?php echo wp_kses_post( $item['content'] ); ?>
</div>
<?php endif; ?>
<?php if ( ! empty( $item['pricing'] ) ) : ?>
<div class="discount-pricing">
<?php echo wp_kses_post( $item['pricing'] ); ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>

Soubor: your-theme/wpify-woo-discount-rules/pricing-table.php

<?php
/**
* Custom Pricing Table Template - Cards layout
*/
defined( 'ABSPATH' ) || exit;
$header = $args['header'] ?? [];
$body = $args['body'] ?? [];
?>
<div class="custom-pricing-cards">
<?php foreach ( $body as $index => $row ) : ?>
<div class="pricing-card">
<div class="pricing-card__quantity">
<?php echo esc_html( $row[0] ); ?>
</div>
<div class="pricing-card__price">
<?php echo wp_kses_post( $row[1] ); ?>
</div>
<?php if ( 0 === $index ) : ?>
<span class="pricing-card__badge">Nejlepší nabídka!</span>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>

Před renderováním šablony můžete upravit data pomocí filtrů.

Univerzální filtr pro všechny šablony. Spouští se před renderováním jakékoli šablony.

add_filter('wpify_templates_template_args', function($args, $slug, $name, $filename, $templates) {
// Upravte args pro všechny šablony
if ($slug === 'info-block') {
// Přidejte custom třídu pro info-block
$args['classes']['block'][] = 'my-custom-class';
}
return $args;
}, 10, 5);

Parametry:

  • $args (array) - Template argumenty
  • $slug (string) - Template slug (např. ‘info-block’)
  • $name (string|null) - Template name (např. null)
  • $filename (string) - Full filename (např. ‘info-block’)
  • $templates (WordPressTemplates) - Templates instance

Filtr pro info-block šablonu. Spouští se před renderováním info bloku.

add_filter('wpify_woo_discounts_info_block_args', function($args, $product) {
// Přidejte custom wrapper třídu
$args['classes']['block'][] = 'my-info-block-class';
// Přidejte custom položku
$args['items'][] = [
'rule' => [],
'content' => '<p>Extra info zde!</p>',
'pricing' => '',
];
return $args;
}, 10, 2);

Parametry:

  • $args (array) - Info block argumenty
  • $product (WC_Product) - Product object

wpify_woo_discounts_info_block_item_content

Section titled “wpify_woo_discounts_info_block_item_content”

Filtr pro obsah každé položky v info bloku.

add_filter('wpify_woo_discounts_info_block_item_content', function($content, $rule, $product) {
// Pro Bulk slevy přidejte custom zprávu
if ($rule['type'] === 'bulk') {
$content = '<strong>Množstevní sleva!</strong><br>' . $content;
}
return $content;
}, 10, 3);

Parametry:

  • $content (string) - Current content (může být prázdný)
  • $rule (array) - Rule configuration
  • $product (WC_Product) - Product object

wpify_woo_discounts_info_block_item_pricing

Section titled “wpify_woo_discounts_info_block_item_pricing”

Filtr pro pricing každé položky v info bloku.

add_filter('wpify_woo_discounts_info_block_item_pricing', function($pricing, $rule, $product) {
// Pro Bundle slevy upravte pricing HTML
if ($rule['type'] === 'bundle') {
// $pricing obsahuje HTML pricing tabulky
$pricing = '<div class="bundle-pricing">' . $pricing . '</div>';
}
return $pricing;
}, 10, 3);

Parametry:

  • $pricing (string) - Current pricing HTML (může být prázdný)
  • $rule (array) - Rule configuration
  • $product (WC_Product) - Product object

Filtr pro data selection bloku (Manual Select).

add_filter('wpify_woo_discounts_selection_html_data', function($data) {
// Přidejte custom třídu
$data['classes']['block'][] = 'my-selection-block';
// Změňte title
$data['title'] = 'Vyber si svůj dárek!';
// Změňte description
$data['description'] = 'Dostaneš ho zdarma k objednávce.';
return $data;
});

Parametry:

  • $data (array) - Display data (classes, title, description, button labels)

wpify_woo_discounts_selection_html_item_data

Section titled “wpify_woo_discounts_selection_html_item_data”

Filtr pro data každé položky v selection seznamu.

add_filter('wpify_woo_discounts_selection_html_item_data', function($item_data, $product, $settings, $hidden_elements) {
// Upravte button label
if ($product->is_on_sale()) {
$item_data['button_label'] = 'Vybrat tento výprodej!';
}
// Přidejte custom třídu
$item_data['classes']['item'][] = 'on-sale-item';
return $item_data;
}, 10, 4);

Parametry:

  • $item_data (array) - Item data (classes, button label, stock status, etc.)
  • $product (WC_Product) - Product object
  • $settings (array) - Nastavení Manual Select skupiny
  • $hidden_elements (array) - Seznam skrytých elementů

Filtr pro data upsell baru.

add_filter('wpify_woo_discounts_upsell_bar_data', function($data, $bar, $index) {
// Přidejte custom třídu
$data['additional_classes']['block'][] = 'my-upsell-class';
// Upravte zprávu
$data['message'] = $data['message'];
return $data;
}, 10, 3);

Parametry:

  • $data (array) - Display data (classes, message, goals_data, etc.)
  • $bar (array) - Bar configuration
  • $index (int) - Bar index

wpify_woo_discounts_upsell_bar_wrapper_classes

Section titled “wpify_woo_discounts_upsell_bar_wrapper_classes”

Filtr pro wrapper třídy upsell baru.

add_filter('wpify_woo_discounts_upsell_bar_wrapper_classes', function($classes, $bar, $index) {
// Přidejte třídu podle indexu
$classes[] = 'upsell-bar-' . $index;
// Přidejte třídu podle typu
$type = $bar['type'] ?? '';
if ($type === 'cart_subtotal') {
$classes[] = 'upsell-bar--subtotal';
}
return $classes;
}, 10, 3);

Parametry:

  • $classes (array) - Wrapper CSS classes
  • $bar (array) - Bar configuration
  • $index (int) - Bar index

Každá šablona obsahuje action hooks pro přidání vlastního HTML.

// Na začátku bloku
add_action('wpify_woo_discounts_info_block_html_start', function($items, $product) {
echo '<div class="custom-intro">Speciální slevy pro tento produkt:</div>';
}, 10, 2);
// Na začátku každé položky
add_action('wpify_woo_discounts_info_block_html_item_start', function($items, $product) {
echo '<span class="item-badge">SLEVA</span>';
}, 10, 2);
// Před pricing tabulkou
add_action('wpify_woo_discounts_info_block_html_item_before_pricing', function($items, $product) {
echo '<p class="pricing-intro">Cenová tabulka:</p>';
}, 10, 2);
// Na konci každé položky
add_action('wpify_woo_discounts_info_block_html_item_end', function($items, $product) {
echo '<a href="/sale">Zobrazit všechny slevy</a>';
}, 10, 2);
// Na konci bloku
add_action('wpify_woo_discounts_info_block_html_end', function($items, $product) {
echo '<div class="custom-footer">* Slevy platí do odvolání</div>';
}, 10, 2);

// Před seznamem produktů
add_action('wpify_woo_discounts_selection_html_before_list', function($rule, $data) {
echo '<div class="selection-intro">Vyber si jeden z produktů:</div>';
}, 10, 2);
// Na začátku seznamu
add_action('wpify_woo_discounts_selection_html_list_start', function($rule, $data) {
echo '<div class="list-header">Dostupné produkty:</div>';
}, 10, 2);
// Pro každý produkt (custom render)
add_action('wpify_woo_discounts_selection_html_item', function($rule, $data, $product_entry) {
// Defaultně se zde vykresluje selection-item.php
// Můžete zde vykreslit vlastní HTML místo výchozí šablony
}, 10, 3);
// Na konci seznamu
add_action('wpify_woo_discounts_selection_html_list_end', function($rule, $data) {
echo '<div class="list-footer">Všechny produkty skladem</div>';
}, 10, 2);
// Za seznamem produktů
add_action('wpify_woo_discounts_selection_html_after_list', function($rule, $data) {
echo '<p class="selection-note">Výběr lze změnit i po přidání do košíku.</p>';
}, 10, 2);

// Na začátku položky
add_action('wpify_woo_discounts_selection_html_item_start', function($rule, $item_data, $product) {
if ($product->is_featured()) {
echo '<span class="featured-badge">Doporučujeme!</span>';
}
}, 10, 3);
// Na začátku obsahu
add_action('wpify_woo_discounts_selection_html_item_content_start', function($rule, $item_data, $product) {
echo '<div class="item-wrapper">';
}, 10, 3);
// Na začátku detailů
add_action('wpify_woo_discounts_selection_html_item_details_start', function($rule, $item_data, $product) {
$sku = $product->get_sku();
if ($sku) {
echo '<span class="sku">SKU: ' . esc_html($sku) . '</span>';
}
}, 10, 3);
// Na konci detailů
add_action('wpify_woo_discounts_selection_html_item_details_end', function($rule, $item_data, $product) {
// Přidejte rating
woocommerce_template_loop_rating();
}, 10, 3);
// Před formulářem
add_action('wpify_woo_discounts_selection_html_item_before_form', function($rule, $item_data, $product) {
echo '<div class="stock-info">' . wc_get_stock_html($product) . '</div>';
}, 10, 3);
// Na konci obsahu
add_action('wpify_woo_discounts_selection_html_item_content_end', function($rule, $item_data, $product) {
echo '</div>'; // Close wrapper from content_start
}, 10, 3);
// Na konci položky
add_action('wpify_woo_discounts_selection_html_item_end', function($rule, $item_data, $product) {
echo '<hr class="item-separator">';
}, 10, 3);

Příklad 1: Přidat countdown do info bloku

Section titled “Příklad 1: Přidat countdown do info bloku”
add_action('wpify_woo_discounts_info_block_html_start', function($items, $product) {
// Najděte pravidlo s časovým omezením
foreach ($items as $item) {
$rule = $item['rule'] ?? [];
$conditions = $rule['conditions'] ?? [];
foreach ($conditions as $condition_group) {
foreach ($condition_group as $condition) {
if ($condition['type'] === 'date' && !empty($condition['date_end'])) {
$end_date = strtotime($condition['date_end']);
if ($end_date > time()) {
echo '<div class="discount-countdown">';
echo 'Sleva platí ještě ' . human_time_diff(time(), $end_date);
echo '</div>';
return; // Stop after first
}
}
}
}
}
}, 10, 2);

Příklad 2: Upravit button label podle produktu

Section titled “Příklad 2: Upravit button label podle produktu”
add_filter('wpify_woo_discounts_selection_html_item_data', function($item_data, $product, $settings, $hidden_elements) {
// Upravte label podle stavu produktu
if ($product->is_on_sale()) {
$item_data['button_label'] = 'Vybrat akční produkt';
} elseif ($product->is_featured()) {
$item_data['button_label'] = 'Vybrat doporučený';
} else {
$item_data['button_label'] = 'Vybrat';
}
return $item_data;
}, 10, 4);

Soubor: your-theme/wpify-woo-discount-rules/pricing-table.php

<?php
/**
* Custom Pricing Table - Horizontal Cards
*/
defined( 'ABSPATH' ) || exit;
$header = $args['header'] ?? [];
$body = $args['body'] ?? [];
?>
<div class="custom-pricing-horizontal">
<h4 class="pricing-title">Čím více kupujete, tím více šetříte!</h4>
<div class="pricing-cards-row">
<?php foreach ( $body as $index => $row ) : ?>
<div class="pricing-card <?php echo 0 === $index ? 'pricing-card--best' : ''; ?>">
<?php if ( 0 === $index ) : ?>
<span class="badge">Nejlepší nabídka</span>
<?php endif; ?>
<div class="card-quantity">
<?php echo esc_html( $row[0] ); ?>
</div>
<div class="card-price">
<?php echo wp_kses_post( $row[1] ); ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<style>
.custom-pricing-horizontal {
margin: 20px 0;
padding: 20px;
background: #f7f7f7;
border-radius: 8px;
}
.pricing-title {
text-align: center;
margin-bottom: 20px;
}
.pricing-cards-row {
display: flex;
gap: 15px;
justify-content: center;
}
.pricing-card {
flex: 1;
max-width: 200px;
padding: 20px;
background: white;
border: 2px solid #ddd;
border-radius: 8px;
text-align: center;
position: relative;
}
.pricing-card--best {
border-color: #008B8B;
transform: scale(1.05);
}
.pricing-card .badge {
position: absolute;
top: -10px;
left: 50%;
transform: translateX(-50%);
background: #008B8B;
color: white;
padding: 5px 15px;
border-radius: 20px;
font-size: 12px;
font-weight: bold;
}
.card-quantity {
font-size: 18px;
font-weight: bold;
margin-bottom: 10px;
}
.card-price {
font-size: 24px;
color: #008B8B;
}
</style>

Příklad 4: Přidat vlastní pole do selection itemu

Section titled “Příklad 4: Přidat vlastní pole do selection itemu”
// Přidejte custom field do product meta
add_action('wpify_woo_discounts_selection_html_item_details_end', function($rule, $item_data, $product) {
// Přidejte delivery time
$delivery = get_post_meta($product->get_id(), '_delivery_time', true);
if ($delivery) {
echo '<div class="delivery-time">';
echo 'Dodání: ' . esc_html($delivery);
echo '</div>';
}
// Přidejte skladem
echo '<div class="stock-status">';
if ($product->is_in_stock()) {
echo 'Skladem';
} else {
echo 'Vyprodáno';
}
echo '</div>';
}, 10, 3);

Příklad 5: Změnit třídy podle product kategorie

Section titled “Příklad 5: Změnit třídy podle product kategorie”
add_filter('wpify_woo_discounts_selection_html_item_data', function($item_data, $product, $settings, $hidden_elements) {
// Přidejte třídu podle kategorie
$categories = $product->get_category_ids();
foreach ($categories as $cat_id) {
$cat = get_term($cat_id, 'product_cat');
if ($cat) {
$item_data['classes']['item'][] = 'category-' . $cat->slug;
}
}
return $item_data;
}, 10, 4);

Musím přepsat celou šablonu?

Ne. Můžete použít hooky pro přidání vlastního HTML bez přepisování šablony.

Příklad:

// Místo přepsání info-block.php:
add_action('wpify_woo_discounts_info_block_html_start', function($items, $product) {
echo '<div class="my-custom-intro">Custom HTML zde</div>';
}, 10, 2);
Jak zjistím jaké argumenty má šablona?

Každá šablona má docblock komentář v hlavičce souboru s popisem $args.

Příklad:

/**
* Info Block Template
*
* @var array $args Template arguments
* - items (array) Array of items with 'rule', 'content', 'pricing'
* - product (WC_Product) Product object
*/
Mohu používat child theme?

Ano. WordPressTemplates hledá šablony nejprve v child theme, pak v parent theme, pak v pluginu.

Struktura:

wp-content/themes/my-child-theme/
└── wpify-woo-discount-rules/
├── info-block.php
├── pricing-table.php
└── selection-item.php
Jak debugovat šablony?

1. Zjistěte, která šablona se používá:

add_filter('wpify_templates_template_args', function($args, $slug, $name, $filename) {
error_log("Loading template: $filename");
error_log("Args: " . print_r($args, true));
return $args;
}, 10, 4);

2. Vypište argumenty v šabloně:

<?php
// V šabloně
echo '<pre>';
print_r($args);
echo '</pre>';
?>
Jak odstranit výchozí hook?

Použijte remove_action() nebo remove_filter().

Příklad:

// Najděte hook v kódu pluginu
// Např. pokud plugin přidává hook v ManualSelectMode::setup_default_template_hooks()
// Odstraňte hook
remove_action('wpify_woo_discounts_selection_html_item', [
$manual_select_instance,
'render_selection_item'
], 10);
// Přidejte vlastní
add_action('wpify_woo_discounts_selection_html_item', 'my_custom_item_render', 10, 3);