Keď zákazník nakupuje tovar na Vašom e-shope a platí ho formou prevodu na bankový účet, dostáva sa jeho objednávka do stavu „čaká na platbu“ a prichádza mu notifikačný e-mail.
V ňom je síce napísané, že na identifikáciu platby je potrebné použiť číslo objednávky, nie každý si však z toho odvodí, že má číslo objednávky zadať vo svojom internet bankingu ako variabilný symbol.
Aby sme to zákazníkom uľahčili, použijeme jednoduchý snippet, ktorý vložíme do functions.php (ideálne v child téme) a variabilný symbol doplníme do notifikačného e-mailu. Zároveň sa variabilný symbol zjaví aj na ďakovnej stránke, ktorá potvrdzuje úspešnú objednávku.
add_filter( 'woocommerce_bacs_account_fields', 'custom_bacs_account_field', 10, 2);
function custom_bacs_account_field( $account_fields, $order_id ) {
static $call_counter = 0;
if($call_counter > 0 ) {
return $account_fields;
}
$order = wc_get_order( $order_id );
$account_fields['variable_symbol' ] = array(
'label' => 'Variabilný symbol',
'value' => $order->get_order_number()
);
$call_counter++;
return $account_fields;
}
Tento kód bol pôvodne funkčný aj bez statickej premennej $call_counter. V nových verziách WooCommerce, však z nezistiteľných dôvodov dochádza k duplikácií variabilného symbolu, čo vyzerá amatérsky.
Na začiatku si teda definujeme premennú $call_counter, ktorú nastavíme na nulu. Nasleduje podmienka, v ktorej kontrolujeme hodnotu tejto premennej a ak je vyššia ako 0, znamená to, že cyklus, ktorý spracováva túto funkciu už prebehol a teda nerobíme nič, len rovno vrátime hotový výsledok. Ak je ale hodnota 0, spustíme zbytok kódu. V ňom do premennej $account_fields[‚variable_symbol‘] pridáme hodnotu Variabilný symbol : číslo objednávky a tým dosiahneme to, čo potrebujeme.
Výsledok v potvrdzujúcom e-maili a na ďakovnej stránke vyzerá takto:
Poznáte iný spôsob ako vypisovať variabilný symbol? Napíšte do komentára.
Získajte prístup k online kurzu Od nápadu k hotovému webu za 30 dní, v ktorom vás naučím, ako si môžete vytvoriť plnohodnotný web za 30 dní, alebo menej, aj keď ste netechnický typ.
Doporučuji ten snippet opravit a použít toto.
$account_fields[‚variable_symbol‘] = array(
‚label‘ => ‚Variabilní symbol‘,
‚value‘ => $order->get_order_number()
);
$order_id je id objednávky v databázi a při vlastním číslování objednávek se bude od čísla objednávky lišit. V případě, že vlastní číslování objednávek není použito, tak vrací $order_id. Pokud se pracuje pouze s tím $order_id, pak je pro změnu zbytečné volat $order = wc_get_order( $order_id );
Ten problém s $call_counter jsem vůbec nezaznamenal a spíš bych zkusil důkladně prohledat kód jestli není funkce použita duplicitně. (např. ve functions.php a pluginu na správu snippetů)
Ďakujeme. Kód som upravil.