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.
Programovaniu webových stránok sa venujem od roku 2006. Pracoval som vo viacerých menších, aj väčších firmách, vždy na pozícií developera. Viem programovať v PHP a poslednú dobu sa venujem výlučne menším a stredne veľkým projektom vo WordPresse.
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.