آموزش مسدود کردن خرید محصولات قبلی برای کاربران در ووکامرس
آیا تا به حال فکر کردهاید که چرا برخی از مشتریان شما یک محصول خاص را چندین بار خریداری میکنند؟ در حالی که این موضوع برای برخی محصولات مانند لوازم مصرفی کاملاً طبیعی است، اما برای محصولات دیجیتال مانند دورههای آموزشی آنلاین، فایلهای قابل دانلود، محصولات سفارشی یا اشتراکهای ویژه، خرید مجدد توسط یک کاربر نه تنها منطقی نیست، بلکه میتواند به سردرگمی در فرآیند فروش و کاهش تجربه کاربری منجر شود. در این مقاله از مجموعه مقالات آموزشی وردپرس، یک کد کاربردی و استاندارد برای مسدود کردن خرید محصولات قبلی در فروشگاههای ووکامرس ارائه میدهیم که با استفاده از آن میتوانید جلوی خرید مجدد محصولات را توسط کاربرانی که قبلاً آن را خریداری کردهاند، بگیرید. این کد با استفاده از فیلتر woocommerce_is_purchasable و تابع کمکی wc_customer_bought_product، دکمه افزودن به سبد خرید را برای کاربرانی که محصول را قبلاً خریدهاند، غیرفعال میکند.
چرا جلوگیری از خرید مجدد محصولات در ووکامرس اهمیت دارد؟
در فروشگاههای اینترنتی که محصولات دیجیتال، دورههای آموزشی، فایلهای قابل دانلود یا محصولات شخصیسازیشده میفروشند، خرید مجدد یک محصول توسط یک کاربر، نه تنها سودی برای فروشنده ندارد، بلکه میتواند باعث ایجاد سفارشات تکراری و غیرضروری، سردرگمی در مدیریت کاربران و کاهش اعتماد مشتری به سیستم فروشگاه شود. به عنوان مثال، اگر کاربری یک دوره آموزشی آنلاین را خریداری کرده باشد، خرید مجدد همان دوره نه تنها منطقی نیست، بلکه ممکن است کاربر را دچار سردرگمی کند و تصور کند که سیستم فروشگاه دچار مشکل شده است. همچنین در فروشگاههایی که محصولات فیزیکی با تعداد محدود دارند، جلوگیری از خرید مجدد توسط یک کاربر، به مدیریت بهتر موجودی و افزایش فرصت خرید برای سایر کاربران کمک میکند. با استفاده از کدی که در این مقاله ارائه میشود، میتوانید به سادگی این قابلیت را به فروشگاه خود اضافه کنید.
راهکار مسدود کردن خرید محصولات قبلی با کد اختصاصی
برای مسدود کردن خرید محصولات قبلی در ووکامرس، از فیلتر woocommerce_is_purchasable استفاده میکنیم. این فیلتر یکی از قدرتمندترین ابزارهای ووکامرس برای کنترل قابلیت خرید محصولات است و به ما اجازه میدهد تا قبل از نمایش دکمه افزودن به سبد خرید، شرایط مختلفی را بررسی کنیم. کد ارائه شده در این مقاله، با استفاده از تابع wc_customer_bought_product که به صورت پیشفرض در ووکامرس وجود دارد، بررسی میکند که آیا کاربر وارد شده، قبلاً محصول مورد نظر را خریداری کرده است یا خیر. اگر کاربر قبلاً محصول را خریداری کرده باشد، مقدار $is_purchasable به false تغییر داده میشود و دکمه افزودن به سبد خرید برای آن کاربر نمایش داده نمیشود. این روش کاملاً استاندارد، سبک و بدون نیاز به نصب افزونه است و با تمامی نسخههای ووکامرس سازگاری دارد.
کد کامل مسدود کردن خرید محصولات قبلی در ووکامرس
در زیر کد کامل و استاندارد برای مسدود کردن خرید محصولات قبلی در ووکامرس آورده شده است. این کد را در انتهای فایل functions.php قالب فرزند خود قرار دهید.
/*
* Prevent Repeat Purchase for WooCommerce Products
* Disables the add to cart button for logged-in users who have already purchased a specific product
* Mahdi Jafarzadeh
* https://www.wpwm.ir/
*/
add_filter('woocommerce_is_purchasable', 'deny_purchase_if_already_purchased', 9999, 2);
function deny_purchase_if_already_purchased($is_purchasable, $product) {
// Only apply to logged-in users
if (is_user_logged_in() && wc_customer_bought_product('', get_current_user_id(), $product->get_id())) {
$is_purchasable = false;
}
return $is_purchasable;
}نحوه عملکرد کد به صورت گام به گام
در این بخش، هر بخش از کد را به صورت دقیق بررسی میکنیم و نحوه عملکرد آن را توضیح میدهیم:
- خط ۶ – افزودن فیلتر با اولویت بالا: با استفاده از
add_filter('woocommerce_is_purchasable', 'deny_purchase_if_already_purchased', 9999, 2)، یک فیلتر به هوکwoocommerce_is_purchasableاضافه میکنیم. عدد ۹۹۹۹ به عنوان اولویت، تضمین میکند که این فیلتر پس از سایر فیلترها اجرا شود و تغییرات ما بر روی خروجی نهایی اعمال گردد. دو پارامتر$is_purchasable(وضعیت خریداریپذیری فعلی) و$product(شیء محصول) به تابع ارسال میشوند. - خط ۸ – تعریف تابع: تابع
deny_purchase_if_already_purchasedبا دو پارامتر ورودی تعریف میشود.$is_purchasableیک متغیر بولین است که نشان میدهد آیا محصول قابل خرید است یا خیر و$productیک شیء از کلاسWC_Productاست که حاوی اطلاعات محصول مورد نظر میباشد. - خط ۱۰ – بررسی ورود کاربر: با استفاده از تابع
is_user_logged_in()بررسی میشود که آیا کاربر وارد سایت شده است یا خیر. این شرط ضروری است زیرا تابعwc_customer_bought_productفقط برای کاربران وارد شده معنا دارد. - بررسی خرید قبلی: با استفاده از تابع
wc_customer_bought_product('', get_current_user_id(), $product->get_id())بررسی میشود که آیا کاربر جاری (get_current_user_id()) قبلاً محصول با شناسه$product->get_id()را خریداری کرده است یا خیر. پارامتر اول (ایمیل) خالی گذاشته شده است تا تابع بر اساس شناسه کاربر جستجو کند. - غیرفعال کردن قابلیت خرید: اگر کاربر وارد شده باشد و قبلاً محصول را خریداری کرده باشد، شرط
ifبرقرار شده و متغیر$is_purchasableرویfalseتنظیم میشود. این کار باعث میشود دکمه افزودن به سبد خرید برای آن کاربر نمایش داده نشود. - بازگشت مقدار: در نهایت، مقدار
$is_purchasable(که ممکن است تغییر کرده باشد) به عنوان خروجی تابع بازگردانده میشود تا ووکامرس بر اساس آن تصمیمگیری کند.
نکات مهم
در این بخش به نکات کلیدی برای استفاده صحیح از این کد اشاره میکنیم که باید به آنها توجه ویژهای داشته باشید:
- استفاده از قالب فرزند: کد را در فایل
functions.phpقالب فرزند قرار دهید تا با بروزرسانی قالب اصلی، تغییرات شما از بین نرود. - تأثیر بر محصولات متغیر: این کد برای محصولات ساده (Simple Products) به خوبی کار میکند. برای محصولات متغیر (Variable Products)، ممکن است نیاز به تنظیمات اضافی داشته باشید زیرا انتخاب تغییرات (variations) از طریق Ajax انجام میشود. در صورت استفاده از محصولات متغیر، حتماً پس از اعمال کد، عملکرد آن را به دقت بررسی کنید.
- تست پس از اعمال کد: پس از افزودن کد، حتماً با یک حساب کاربری که قبلاً محصولی را خریداری کرده است، وارد شوید و صفحه آن محصول را بررسی کنید تا از عدم نمایش دکمه افزودن به سبد خرید اطمینان حاصل کنید.
- پیام به کاربر: این کد فقط دکمه افزودن به سبد خرید را مخفی میکند و پیامی به کاربر نشان نمیدهد. برای بهبود تجربه کاربری، میتوانید با استفاده از فیلترهای دیگر مانند
woocommerce_single_product_summary، یک پیام توضیحی به کاربر نمایش دهید که چرا نمیتواند محصول را خریداری کند. - حذف از سبد خرید: اگر کاربری قبلاً محصولی را خریداری کرده باشد و آن محصول همچنان در سبد خرید او باقی مانده باشد، پس از ورود به سایت، این کد محصول را از سبد خرید حذف کرده و یک پیام خطا نمایش میدهد.
- استثنا برای محصولات خاص: اگر میخواهید این قانون برای همه محصولات اعمال نشود و فقط برخی محصولات خاص از این محدودیت مستثنی شوند، باید منطق کد را تغییر دهید و شناسه محصولات مورد نظر را بررسی کنید.
جمعبندی
در این مقاله از سری مقالات آموزشی وردپرس، به بررسی روش مسدود کردن خرید محصولات قبلی در فروشگاههای ووکامرس پرداختیم. با استفاده از کد ساده و استانداردی که ارائه شد، میتوانید جلوی خرید مجدد محصولات را توسط کاربرانی که قبلاً آن را خریداری کردهاند، بگیرید. این کد با بهرهگیری از فیلتر woocommerce_is_purchasable و تابع wc_customer_bought_product، دکمه افزودن به سبد خرید را برای کاربرانی که محصول را قبلاً خریدهاند، غیرفعال میکند. این راهکار به ویژه برای فروشگاههایی که محصولات دیجیتال، دورههای آموزشی، فایلهای قابل دانلود یا محصولات سفارشی میفروشند، بسیار مفید است و به مدیریت بهتر سفارشات و بهبود تجربه کاربری کمک میکند.
امیدواریم این آموزش برای شما مفید بوده باشد. اگر سوالی درباره مسدود کردن خرید محصولات قبلی، نحوه استفاده از کد یا هر بخش دیگری از این آموزش دارید، لطفاً در بخش نظرات مطرح کنید. همچنین اگر تجربهای در مدیریت خرید مجدد در ووکامرس دارید، خوشحال میشویم آن را با ما و سایر کاربران به اشتراک بگذارید.







