افزودن گزینه “تماس قبل از خرید” به محصولات ووکامرس (مناسب برای محصولات با قیمت متغیر و استعلام موجودی)
آیا در فروشگاه ووکامرس خود محصولاتی دارید که قیمت دقیق آنها ثابت نیست یا موجودی آنها به صورت لحظهای در سایت بهروز نمیشود؟ شاید برخی از محصولات شما نیاز به مشاوره قبل از خرید، استعلام قیمت یا بررسی موجودی داشته باشند. در چنین مواردی، نمایش دکمه “افزودن به سبد خرید” به تنهایی کافی نیست و کاربران باید قبل از خرید با شما تماس بگیرند. در این مقاله از مجموعه مقالات آموزشی وردپرس، یک کد کاربردی و استاندارد برای افزودن گزینه “تماس قبل از خرید” به محصولات ووکامرس ارائه میدهیم که با استفاده از آن میتوانید برای هر محصول به صورت جداگانه، این قابلیت را فعال کنید. پس از فعالسازی، یک پیام هشداردهنده در صفحه محصول نمایش داده میشود که کاربران را به تماس با شما قبل از خرید دعوت میکند. این کار به شفافیت در فرآیند فروش، جلوگیری از ثبت سفارشات اشتباه و افزایش اعتماد مشتریان کمک میکند.
چالش محصولات با قیمت متغیر و نیاز به تماس قبل از خرید
در بسیاری از فروشگاههای اینترنتی، همه محصولات قیمت ثابتی ندارند. برخی محصولات مانند محصولات سفارشی، خدمات ویژه، محصولات با قیمت وابسته به نرخ روز یا کالاهایی که موجودی آنها در سایت بهروز نیست، نیاز به بررسی و استعلام قبل از خرید دارند. همچنین در فروشگاههای B2B (فروش عمده)، اغلب قیمتها برای کاربران عادی قابل مشاهده نیست و خریداران باید با فروشنده تماس بگیرند. ووکامرس به طور پیشفرض چنین قابلیتی را ارائه نمیدهد و شما باید یا از افزونههای جداگانه استفاده کنید یا با کدنویسی این ویژگی را اضافه کنید. با استفاده از کدی که در این مقاله ارائه میشود، به راحتی میتوانید یک چکباکس اختصاصی در تنظیمات موجودی محصول ایجاد کرده و در صورت فعال بودن، یک پیام هشدار به کاربران نمایش دهید.
راهکار افزودن گزینه تماس قبل از خرید با کد اختصاصی
برای افزودن گزینه تماس قبل از خرید به محصولات ووکامرس، از سه هوک اصلی استفاده میکنیم:
- افزودن چکباکس به تنظیمات موجودی محصول: با استفاده از هوک
woocommerce_product_options_inventory_product_data، یک چکباکس با عنوان “تماس قبل از خرید” به بخش موجودی محصول اضافه میشود. این چکباکس برای هر محصول به صورت جداگانه ذخیره میشود. - ذخیره مقدار چکباکس: با استفاده از هوک
woocommerce_process_product_meta، مقدار چکباکس (yes/no) را در فیلد سفارشی محصول با کلیدcontact_before_orderذخیره میکنیم. - نمایش پیام در صفحه محصول: با استفاده از هوک
woocommerce_before_add_to_cart_button، در صورتی که چکباکس برای محصول فعال باشد، یک پیام هشدار قبل از دکمه “افزودن به سبد خرید” نمایش داده میشود.
این روش کاملاً استاندارد، سبک و بدون نیاز به نصب افزونه است و با تمامی نسخههای ووکامرس سازگاری دارد. همچنین پیام نمایش داده شده به راحتی قابل شخصیسازی است.
کد کامل افزودن گزینه تماس قبل از خرید به محصولات ووکامرس
در زیر کد کامل و استاندارد برای افزودن گزینه تماس قبل از خرید به محصولات ووکامرس آورده شده است. این کد را در انتهای فایل functions.php قالب فرزند خود قرار دهید.
/*
* Add "Contact Before Order" Checkbox to WooCommerce Products
* Adds a checkbox in inventory settings to display a contact message on product page
* Mahdi Jafarzadeh
* https://www.wpwm.ir/
*/
// ============================================================
// 1. ADD CHECKBOX TO PRODUCT INVENTORY SETTINGS
// ============================================================
add_action('woocommerce_product_options_inventory_product_data', 'add_contact_before_order_checkbox', 99);
function add_contact_before_order_checkbox() {
woocommerce_wp_checkbox(array(
'id' => 'contact_before_order',
'wrapper_class' => 'show_if_simple show_if_variable',
'label' => __('تماس قبل از خرید', 'woocommerce'),
'description' => __('اگر کاربر باید قبل از خرید برای استعلام قیمت و موجودی تماس بگیرید، این گزینه را فعال کنید.', 'woocommerce'),
));
}
// ============================================================
// 2. SAVE CHECKBOX VALUE
// ============================================================
add_action('woocommerce_process_product_meta', 'save_contact_before_order_checkbox');
function save_contact_before_order_checkbox($post_id) {
$checkbox_value = isset($_POST['contact_before_order']) ? 'yes' : 'no';
update_post_meta($post_id, 'contact_before_order', $checkbox_value);
}
// ============================================================
// 3. DISPLAY MESSAGE ON PRODUCT PAGE
// ============================================================
add_action('woocommerce_before_add_to_cart_button', 'display_contact_before_order_message');
function display_contact_before_order_message() {
global $product;
if (!$product) {
return;
}
// Check if the custom meta is enabled
$contact_required = $product->get_meta('contact_before_order');
if ('yes' === $contact_required) {
echo '<div class="contact-before-order-notice">' .
esc_html__('قبل از خرید این محصول برای استعلام موجودی و قیمت نهایی تماس بگیرید.', 'woocommerce') .
'</div>';
}
}نحوه عملکرد کد به صورت گام به گام
در این بخش، هر بخش از کد را به صورت دقیق بررسی میکنیم و نحوه عملکرد آن را توضیح میدهیم:
- خطوط ۱۰ تا ۱۶ – افزودن چکباکس به تنظیمات موجودی: با استفاده از
add_action('woocommerce_product_options_inventory_product_data', 'add_contact_before_order_checkbox', 99)، یک عملکرد به هوکwoocommerce_product_options_inventory_product_dataاضافه میکنیم. این هوک در بخش تنظیمات موجودی صفحه ویرایش محصول اجرا میشود. تابعadd_contact_before_order_checkboxبا استفاده ازwoocommerce_wp_checkboxیک چکباکس سفارشی ایجاد میکند. پارامترها شامل شناسه (contact_before_order)، کلاس wrapper (برای نمایش در محصولات ساده و متغیر)، برچسب و توضیحات هستند. - خطوط ۱۹ تا ۲۳ – ذخیره مقدار چکباکس: با استفاده از
add_action('woocommerce_process_product_meta', 'save_contact_before_order_checkbox')، یک عملکرد به هوکwoocommerce_process_product_metaاضافه میکنیم. این هوک هنگام ذخیره محصول فراخوانی میشود. در تابعsave_contact_before_order_checkbox، با استفاده ازisset($_POST['contact_before_order'])بررسی میکنیم که آیا چکباکس تیک خورده است یا خیر. سپس مقدارyesیاnoرا باupdate_post_metaدر فیلد سفارشی محصول ذخیره میکنیم. - خطوط ۲۶ تا ۳۹ – نمایش پیام در صفحه محصول: با استفاده از
add_action('woocommerce_before_add_to_cart_button', 'display_contact_before_order_message')، یک عملکرد به هوکwoocommerce_before_add_to_cart_buttonاضافه میکنیم. این هوک درست قبل از دکمه “افزودن به سبد خرید” در صفحه محصول اجرا میشود. در تابعdisplay_contact_before_order_message:- خط ۳۰: با استفاده از
global $product;به شیء محصول فعلی دسترسی پیدا میکنیم. - خطوط ۳۲ تا ۳۴: اگر محصول وجود نداشته باشد، تابع خاتمه مییابد.
- خط ۳۷: با استفاده از
$product->get_meta('contact_before_order')، مقدار فیلد سفارشی را دریافت میکنیم. - خط ۳۹: اگر مقدار برابر با
yesباشد، یکdivبا کلاسcontact-before-order-noticeو پیام “قبل از خرید این محصول برای استعلام موجودی و قیمت نهایی تماس بگیرید.” نمایش داده میشود.
- خط ۳۰: با استفاده از
نکات مهم
در این بخش به نکات کلیدی برای استفاده صحیح از این کد اشاره میکنیم که باید به آنها توجه ویژهای داشته باشید:
- استفاده از قالب فرزند: کد را در فایل
functions.phpقالب فرزند قرار دهید تا با بروزرسانی قالب اصلی، تغییرات شما از بین نرود. - سفارشیسازی پیام: میتوانید متن پیام را در خط ۴۰ کد به هر متن دلخواه تغییر دهید. همچنین میتوانید از HTML در پیام استفاده کنید تا آن را زیباتر کنید.
- استایلدهی به پیام: با افزودن CSS سفارشی به قالب خود، میتوانید ظاهر پیام را تغییر دهید. به عنوان مثال، میتوانید رنگ پسزمینه، حاشیه، اندازه فونت و … را تنظیم کنید. کلاس
contact-before-order-noticeبرای این کار در نظر گرفته شده است. - غیرفعال کردن دکمه افزودن به سبد خرید: در صورت نیاز، میتوانید با استفاده از فیلتر
woocommerce_is_purchasable، دکمه “افزودن به سبد خرید” را به طور کامل غیرفعال کنید و فقط پیام تماس را نمایش دهید. این کار برای محصولاتی که به هیچ وجه نباید به صورت آنلاین خریداری شوند، مناسب است. - تست پس از اعمال کد: پس از افزودن کد، حتماً یک محصول را ویرایش کرده و چکباکس تماس قبل از خرید را فعال کنید. سپس صفحه محصول را در فرانتاند باز کرده و از نمایش پیام اطمینان حاصل کنید.
- سازگاری با محصولات متغیر: این کد برای محصولات ساده و محصولات متغیر به خوبی کار میکند، زیرا کلاس wrapper شامل
show_if_simple show_if_variableاست. - افزودن به محصولات با استفاده از افزونههای دستهجمعی: اگر نیاز به فعالسازی این گزینه برای چندین محصول به صورت همزمان دارید، میتوانید از افزونههای ویرایش انبوه یا ابزارهای سفارشی برای بهروزرسانی فیلد سفارشی استفاده کنید.
جمعبندی
در این مقاله از سری مقالات آموزشی وردپرس، به بررسی روش افزودن گزینه تماس قبل از خرید به محصولات ووکامرس پرداختیم. با استفاده از کد ساده و استانداردی که ارائه شد، میتوانید یک چکباکس اختصاصی به تنظیمات موجودی محصول اضافه کنید و در صورت فعال بودن، یک پیام هشدار قبل از دکمه “افزودن به سبد خرید” نمایش دهید. این ویژگی به ویژه برای محصولات با قیمت متغیر، موجودی نامشخص یا محصولات سفارشی بسیار مفید است و به کاربران کمک میکند تا قبل از خرید با شما تماس بگیرند و از ثبت سفارشات اشتباه جلوگیری شود. این راهکار کاملاً استاندارد و بدون نیاز به نصب افزونه است.
امیدواریم این آموزش برای شما مفید بوده باشد. اگر سوالی درباره افزودن گزینه تماس قبل از خرید، نحوه استفاده از کد یا هر بخش دیگری از این آموزش دارید، لطفاً در بخش نظرات مطرح کنید. همچنین اگر تجربهای در سفارشیسازی ووکامرس یا مدیریت محصولات خاص دارید، خوشحال میشویم آن را با ما و سایر کاربران به اشتراک بگذارید.







