🛡️ WooCommerce-এ ফেক অর্ডার কিভাবে বন্ধ করবেন প্লাগইন ছাড়াই (সম্পূর্ণ গাইড)
বর্তমানে WooCommerce ওয়েবসাইটে ফেক অর্ডার একটি সাধারণ কিন্তু গুরুতর সমস্যা। কেউ বারবার ফোন নাম্বার বা ইমেইল দিয়ে অর্ডার করে কিন্তু সেই অর্ডার কখনো সম্পন্ন করে না। এতে করে স্টক ম্যানেজমেন্ট, রিপোর্টিং, কাস্টমার সার্ভিস সবই নষ্ট হয়ে যায়।
এই ব্লগে আমরা দেখাবো কীভাবে একটি মাত্র PHP কোড ব্যবহার করে আপনি ফেক অর্ডার পুরোপুরি ব্লক করতে পারেন, প্লাগইন ছাড়াই!
⚠️ ফেক অর্ডারের ক্ষতি কী?
- প্রতিনিয়ত ভুয়া অর্ডার আসে
- COD (Cash on Delivery) মিসইউজ হয়
- বারবার একই নাম্বার/ইমেইল দিয়ে অর্ডার
- প্রোডাক্ট রিজার্ভ হয়ে থাকে অথচ অর্ডার কমপ্লিট হয় না
- আসল কাস্টমার বঞ্চিত হয়
✅ এই সমাধানটি কী কী ফিচার দিচ্ছে?
🔐 ডিভাইস আইডি ট্র্যাকিং
একই ডিভাইস থেকে একাধিক অর্ডার ব্লক করে যতক্ষণ না আগের অর্ডার কমপ্লিট হয়।
📧 ইমেইল ও 📞 ফোন নাম্বার ব্লক
একই ফোন বা ইমেইল দিয়ে বারবার অর্ডার করা যাবে না।
🌍 আইপি অ্যাড্রেস চেক
একই IP থেকে আগের অর্ডার পেন্ডিং থাকলে নতুন অর্ডার ব্লক হবে।
⏳ টাইম/অর্ডার স্ট্যাটাস ভিত্তিক
আগের অর্ডার “Completed” না হলে নতুন অর্ডার নেওয়া হবে না।
🎨 সুন্দর স্টাইলিশ পপআপ
অর্ডার ব্লক হলে সুন্দর একটি মেসেজ পপআপ হিসেবে আসবে, ইউজার ফ্রেন্ডলিভাবে।
📲 কল ও WhatsApp বাটন
পপআপে থাকবে “Call Now” ও “WhatsApp” বাটন, যাতে ইউজার সরাসরি যোগাযোগ করতে পারে।
🔁 CartFlows সাপোর্টেড
CartFlows দিয়ে বানানো কাস্টম চেকআউট পেজেও একই রুল কাজ করবে।
🔧 কীভাবে কোডটি কাজ করে?
- যখন একজন ইউজার অর্ডার করতে যায়, তখন সিস্টেম চেক করে সে আগেই কোনো পেন্ডিং অর্ডার করেছে কিনা।
- যদি করে থাকে, তবে নতুন অর্ডার ব্লক করে দেয়।
- এর পরিবর্তে একটি সুন্দর Error Popup দেখায়, যেখানে কাস্টমারের সঙ্গে যোগাযোগের অপশন থাকে।
📥 কোড কোথায় বসাবেন?
- আপনার থিমের
functions.phpফাইলে - অথবা
Code Snippetsপ্লাগইন ব্যবহার করে - চাইলে কাস্টম প্লাগইন হিসেবেও ব্যবহার করতে পারেন
🛠️ কাস্টমাইজেশন টিপস
- শুধু আপনার নম্বরটা কোডে বসিয়ে দিলেই কাজ করবে
- WhatsApp লিংকও নিজের মতো করে সেট করতে পারবেন
- CSS দিয়ে চাইলে ব্র্যান্ড কালারে পপআপ সাজাতে পারবেন
<?php
/**
* Plugin Name: WooCommerce Multi-Factor Order Blocker with Stylish Popup + CartFlows Support
* Description: Block multiple orders from same device, phone or IP until previous order completes. Supports normal WooCommerce checkout & CartFlows Ajax checkout. Shows popup with Call & WhatsApp buttons.
* Version: 1.1
* Author: Your Name
*/
// === ১. সাধারণ WooCommerce Checkout Process এ ব্লক চেক করা ===
add_action('woocommerce_checkout_process', 'custom_block_multiple_orders_check');
function custom_block_multiple_orders_check() {
$email = sanitize_email($_POST['billing_email'] ?? '');
$phone = sanitize_text_field($_POST['billing_phone'] ?? '');
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown_ip';
$device_id = $_COOKIE['device_id'] ?? '';
// আগের অর্ডার খুঁজছি যা সম্পন্ন হয়নি
$args = [
'limit' => -1,
'status' => ['pending', 'processing', 'on-hold'],
'billing_email' => $email,
];
$orders = wc_get_orders($args);
$block_order = false;
foreach ($orders as $order) {
$order_phone = $order->get_billing_phone();
$order_ip = get_post_meta($order->get_id(), '_user_ip', true);
$order_device = get_post_meta($order->get_id(), '_device_id', true);
if (
($phone && $phone === $order_phone) ||
($ip && $ip === $order_ip) ||
($device_id && $device_id === $order_device)
) {
$block_order = true;
break;
}
}
if ($block_order) {
// ====== নিচের দুই নম্বর পরিবর্তন করো ======
$phone_number = '01234567890'; // কল করার নম্বর
$whatsapp_number = '8801234567890'; // WhatsApp নম্বর (country code সহ)
// ========================================
$msg = '
<div class="custom-popup-error">
<p>⚠️ আপনার একটি অর্ডার এখনও সম্পন্ন হয়নি। নতুন অর্ডার করতে নিচের নম্বরগুলোতে যোগাযোগ করুন।</p>
<div class="btn-group">
<a href="tel:' . esc_attr($phone_number) . '" class="btn-call" target="_blank">📞 Call Now</a>
<a href="https://wa.me/' . esc_attr($whatsapp_number) . '" class="btn-whatsapp" target="_blank">💬 WhatsApp</a>
</div>
</div>';
wc_add_notice($msg, 'error');
}
// ডিভাইস আইডি Cookie তৈরি (যদি না থাকে)
if (!$device_id) {
$device_id_new = bin2hex(random_bytes(10));
setcookie('device_id', $device_id_new, time() + (86400 * 30), "/"); // ৩০ দিন মেয়াদ
}
}
// === ২. CartFlows Ajax Checkout Submit এও ব্লক চেক করা ===
add_action('wp_ajax_wc_cartflows_submit_checkout', 'custom_cartflows_ajax_checkout_check');
add_action('wp_ajax_nopriv_wc_cartflows_submit_checkout', 'custom_cartflows_ajax_checkout_check');
function custom_cartflows_ajax_checkout_check() {
$email = sanitize_email($_POST['billing_email'] ?? '');
$phone = sanitize_text_field($_POST['billing_phone'] ?? '');
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown_ip';
$device_id = $_COOKIE['device_id'] ?? '';
$args = [
'limit' => -1,
'status' => ['pending', 'processing', 'on-hold'],
'billing_email' => $email,
];
$orders = wc_get_orders($args);
foreach ($orders as $order) {
$order_phone = $order->get_billing_phone();
$order_ip = get_post_meta($order->get_id(), '_user_ip', true);
$order_device = get_post_meta($order->get_id(), '_device_id', true);
if (
($phone && $phone === $order_phone) ||
($ip && $ip === $order_ip) ||
($device_id && $device_id === $order_device)
) {
// ====== নিচের দুই নম্বর পরিবর্তন করো ======
$phone_number = '01234567890'; // কল করার নম্বর
$whatsapp_number = '8801234567890'; // WhatsApp নম্বর (country code সহ)
// ========================================
wp_send_json_error([
'messages' => '<div class="custom-popup-error">
<p>⚠️ আপনার একটি অর্ডার এখনও সম্পন্ন হয়নি। নতুন অর্ডার করতে নিচের নম্বরগুলোতে যোগাযোগ করুন।</p>
<div class="btn-group">
<a href="tel:' . esc_attr($phone_number) . '" class="btn-call" target="_blank">📞 Call Now</a>
<a href="https://wa.me/' . esc_attr($whatsapp_number) . '" class="btn-whatsapp" target="_blank">💬 WhatsApp</a>
</div>
</div>'
]);
}
}
wp_send_json_success();
}
// === ৩. অর্ডার তৈরি হলে IP ও Device ID মেটাডেটা সেভ করা ===
add_action('woocommerce_checkout_update_order_meta', function ($order_id) {
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown_ip';
$device_id = $_COOKIE['device_id'] ?? 'unknown_device_id';
update_post_meta($order_id, '_user_ip', sanitize_text_field($ip));
update_post_meta($order_id, '_device_id', sanitize_text_field($device_id));
});
// === ৪. স্টাইলিং ===
add_action('wp_head', function () {
if (is_checkout() || function_exists('cartflows')) { // Checkout অথবা CartFlows পেজে CSS যোগ করবো
?>
<style>
.custom-popup-error {
background: #fff0f0;
border: 2px solid #ff4d4d;
padding: 20px 25px;
border-radius: 10px;
color: #b30000;
font-size: 17px;
font-weight: 600;
text-align: center;
box-shadow: 0 6px 15px rgba(255, 0, 0, 0.2);
animation: popupFadeIn 0.7s ease forwards;
margin-bottom: 20px;
}
.custom-popup-error .btn-group {
margin-top: 15px;
display: flex;
justify-content: center;
gap: 20px;
}
.custom-popup-error .btn-call,
.custom-popup-error .btn-whatsapp {
display: inline-block;
padding: 12px 22px;
border-radius: 30px;
font-weight: 700;
color: white !important;
text-decoration: none;
box-shadow: 0 4px 10px rgba(0,0,0,0.15);
transition: background-color 0.3s ease;
min-width: 130px;
}
.custom-popup-error .btn-call {
background-color: #e60000;
}
.custom-popup-error .btn-call:hover {
background-color: #b30000;
}
.custom-popup-error .btn-whatsapp {
background-color: #25D366;
}
.custom-popup-error .btn-whatsapp:hover {
background-color: #1DA851;
}
@keyframes popupFadeIn {
0% {opacity: 0; transform: translateY(-10px);}
100% {opacity: 1; transform: translateY(0);}
}
</style>
<?php
}
});
// === ৫. Checkout পেজে error message এটো-স্ক্রল করার জন্য JS ===
add_action('wp_footer', function () {
if (is_checkout()) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const errorBox = document.querySelector(".woocommerce-error");
if(errorBox){
errorBox.scrollIntoView({behavior: "smooth"});
}
});
</script>
<?php
}
});

