Niekedy zákazník nepotrebuje prehľadávať celý katalóg, aby si kúpil to isté čo minule. Stačí mu číslo predchádzajúcej objednávky a e-mail. Tento snippet vytvorí jednoduchý formulár, ktorý po overení údajov automaticky naplní košík identickými produktmi a presmeruje zákazníka k pokladni.
Ako to funguje?
Tento kód zaregistruje shortcode [repeat_order_form], ktorý môžete vložiť kamkoľvek – do stránky, príspevku alebo do widgetu.
- Formulár: Zobrazí dve polia (E-mail a Číslo objednávky).
- Overenie: Cez AJAX (bez obnovenia stránky) skontroluje, či objednávka s daným číslom existuje a či k nej prislúcha zadaný e-mail.
- Akcia: Ak údaje sedia, systém vyprázdni aktuálny košík, pridá doň položky z pôvodnej objednávky a pošle zákazníka priamo do pokladne.
PHP
function zopakovat_objednavku_formular() {
ob_start();
?>
<style>
#repeat-order-form .form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 1rem;
row-gap: 0.5rem;
margin-bottom: 1.5rem;
}
#repeat-order-form .form-group {
display: flex;
flex-direction: column;
}
#repeat-order-form button {
margin-bottom: 0.5rem;
}
#repeat-order-form #response-message {
display: none;
}
</style>
<form id="repeat-order-form">
<div class="form-grid">
<div class="form-group">
<label for="email">Váš e-mail:</label>
<input type="email" name="email" id="email" required class="input-text" />
</div>
<div class="form-group">
<label for="order_id">Číslo objednávky:</label>
<input type="text" name="order_id" id="order_id" required class="input-text" />
</div>
</div>
<button type="submit" class="button alt">Zopakovať objednávku</button>
<p id="response-message" class="woocommerce-error"></p>
</form>
<script>
jQuery(document).ready(function($) {
$('#repeat-order-form').submit(function(e) {
e.preventDefault();
var email = $('#email').val();
var order_id = $('#order_id').val();
$.ajax({
type: "POST",
url: "<?php echo admin_url('admin-ajax.php'); ?>",
data: {
action: "repeat_order",
email: email,
order_id: order_id
},
success: function(response) {
if (response.success) {
// Tu zmeňte URL na vašu stránku pokladne/košíka
window.location.href = "https://vasadomena.sk/pokladna/";
} else {
$('#response-message')
.text(response.data)
.show();
}
}
});
});
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('repeat_order_form', 'zopakovat_objednavku_formular');
// AJAX proces na pozadí
function zopakovat_objednavku_ajax() {
if (!isset($_POST['email']) || !isset($_POST['order_id'])) {
wp_send_json_error("Neplatné údaje.");
}
$email = sanitize_email($_POST['email']);
$order_id = intval($_POST['order_id']);
$order = wc_get_order($order_id);
if ($order && $order->get_billing_email() === $email) {
WC()->cart->empty_cart(); // Vyčistíme košík pred pridaním nových vecí
foreach ($order->get_items() as $item) {
WC()->cart->add_to_cart($item->get_product_id(), $item->get_quantity());
}
wp_send_json_success();
} else {
wp_send_json_error("Objednávka nebola nájdená alebo e-mail nesedí.");
}
}
add_action('wp_ajax_repeat_order', 'zopakovat_objednavku_ajax');
add_action('wp_ajax_nopriv_repeat_order', 'zopakovat_objednavku_ajax');Na čo si dať pozor?
- URL adresa presmerovania (riadok 60): V skripte (riadok s
window.location.href) je nastavená statická adresa. Pred nasadením ju nezabudnite zmeniť na vašu reálnu adresu pokladne (checkout). - Štýlovanie: Pridal som základné CSS, aby polia boli vedľa seba, ale snippet preberá vizuál vašej témy (tlačidlá, fonty). Ak to nevyzerá podľa vašich predstáv, CSS v hlavičke funkcie si upravte.
- Bezpečnosť: Snippet kontroluje zhodu e-mailu a ID objednávky. To bráni tomu, aby niekto náhodne „skúšal“ čísla objednávok a pozeral, čo v nich bolo.


