آموزش طراحی سایت و برنامهنویسی وب
نمایش «رایگان» به جای قیمت صفر در ووکامرس (کد آماده + سبد خرید)
- ووکامرس برای محصولی که قیمتش صفر است، «۰ تومان» نشان میدهد که برای کاربر جذاب نیست و گاهی شبیه خطاست.
- با فیلتر
woocommerce_get_price_htmlمیتوانید بهجای آن عبارت «رایگان» نمایش دهید. - کد کامل این مقاله محصولات ساده، متغیر و حراجی، سبد خرید و متن دکمه را هم پوشش میدهد.
- کد را با افزونهٔ Code Snippets یا در functions.php قالب فرزند اضافه کنید، نه در قالب اصلی.
اگر در فروشگاه ووکامرسی خود محصول رایگان دارید (مثلاً فایل آموزشی، نمونهٔ محصول یا هدیه)، احتمالاً دیدهاید که ووکامرس زیر آنها «۰ تومان» مینویسد. در این آموزش یاد میگیرید با چند خط کد، نمایش رایگان به جای صفر در ووکامرس را فعال کنید؛ آن هم نه فقط در صفحهٔ محصول، بلکه در سبد خرید و روی دکمهٔ خرید.
چرا نمایش «رایگان» بهتر از «۰ تومان» است؟

کلمهٔ «رایگان» یکی از قویترین محرکهای کلیک در فروشگاههای اینترنتی است؛ در حالی که عدد صفر معمولاً این حس را منتقل نمیکند و حتی ممکن است کاربر فکر کند قیمت محصول هنوز وارد نشده است. اگر به روانشناسی خرید علاقه دارید، ترفندهای روانشناسی فروش برای فروشگاه اینترنتی را هم بخوانید.
کد را کجا اضافه کنیم؟
امنترین روش؛ با بهروزرسانی قالب پاک نمیشود و اگر خطا بدهد، خودکار غیرفعال میشود.
اگر قالب فرزند دارید، کد را انتهای functions.php آن اضافه کنید.
هشدار: کد را در functions.php قالب اصلی نگذارید؛ با اولین بهروزرسانی قالب پاک میشود. قبل از هر تغییری هم از سایت بکاپ بگیرید. اگر Code Snippets را استفاده میکنید، خط اول یعنی <?php را کپی نکنید.
کد اصلی نمایش «رایگان» بهجای قیمت صفر
این کد فیلتر woocommerce_get_price_html را تغییر میدهد؛ همان فیلتری که HTML قیمت را در صفحهٔ محصول، فروشگاه و آرشیوها میسازد:
<?php
/**
* نمایش «رایگان» بهجای قیمت صفر در ووکامرس
* طاووس وب - tavoosweb.ir
*/
add_filter( 'woocommerce_get_price_html', 'tavoos_free_price_label', 10, 2 );
function tavoos_free_price_label( $price, $product ) {
// محصول متغیر: فقط وقتی همهٔ متغیرها رایگان باشند
if ( $product->is_type( 'variable' ) ) {
$is_free = (float) $product->get_variation_price( 'max' ) === 0.0;
} else {
$is_free = $product->get_price() !== '' && (float) $product->get_price() === 0.0;
}
if ( ! $is_free ) {
return $price;
}
// محصول حراجی که به صفر رسیده: قیمت قبلی خطخورده بماند
if ( $product->is_on_sale() && $product->get_regular_price() ) {
return '<del>' . wc_price( $product->get_regular_price() ) . '</del> <ins class="tavoos-free">رایگان</ins>';
}
return '<span class="tavoos-free">رایگان</span>';
}چند نکته دربارهٔ این کد:
- بهجای مقایسهٔ متن HTML قیمت، خود عدد قیمت بررسی میشود؛ پس با هر واحد پولی (تومان، ریال) و هر افزونهٔ فارسیساز کار میکند.
- محصولی که اصلاً قیمت ندارد (فیلد قیمت خالی) «رایگان» نمایش داده نمیشود.
- در محصول متغیر، فقط وقتی همهٔ متغیرها رایگان باشند برچسب «رایگان» میآید؛ وگرنه بازهٔ قیمت عادی نمایش داده میشود.
کد قدیمی این مقاله را استفاده میکردید؟
نسخهٔ قبلی این آموزش، متن HTML قیمت را با wc_price(0.00) مقایسه میکرد. آن کد هنوز در بسیاری از سایتها کار میکند، اما اگر قالب یا افزونهای HTML قیمت را تغییر دهد، مقایسه شکست میخورد. پیشنهاد میکنیم آن را با کد جدید بالا جایگزین کنید.
add_filter( 'woocommerce_get_price_html', 'changeZeroPrice', 10, 2 );
function changeZeroPrice( $price, $product ) {
if ( $price == wc_price( 0.00 ) )
return 'رایگان';
else
return $price;
}نمایش «رایگان» در سبد خرید
کد اصلی فقط قیمت را در صفحات محصول تغییر میدهد. برای اینکه در جدول سبد خرید هم بهجای «۰ تومان» عبارت «رایگان» بیاید، این کد را هم اضافه کنید:
// نمایش «رایگان» در ستون قیمت سبد خرید
add_filter( 'woocommerce_cart_item_price', 'tavoos_free_cart_price', 10, 3 );
function tavoos_free_cart_price( $price, $cart_item, $cart_item_key ) {
return ( (float) $cart_item['data']->get_price() === 0.0 )
? '<span class="tavoos-free">رایگان</span>'
: $price;
}خبر خوب: اگر جمع کل سفارش صفر باشد، ووکامرس در صفحهٔ تسویهحساب درگاه پرداخت نمیخواهد و سفارش مستقیم ثبت میشود. پس برای محصولات رایگان به تنظیم خاصی در درگاه نیاز ندارید.
تغییر متن دکمه به «دریافت رایگان»
دکمهٔ «افزودن به سبد خرید» برای محصول رایگان کمی عجیب است. با این کد، متن دکمه در صفحهٔ محصول و فروشگاه برای محصولات رایگان تغییر میکند:
// تغییر متن دکمه برای محصولات رایگان
add_filter( 'woocommerce_product_single_add_to_cart_text', 'tavoos_free_button_text', 10, 2 );
add_filter( 'woocommerce_product_add_to_cart_text', 'tavoos_free_button_text', 10, 2 );
function tavoos_free_button_text( $text, $product ) {
if ( $product && $product->get_price() !== '' && (float) $product->get_price() === 0.0 ) {
return 'دریافت رایگان';
}
return $text;
}استایل برچسب «رایگان»
برای اینکه برچسب رایگان به چشم بیاید، این CSS را در «نمایش ← سفارشیسازی ← CSS اضافی» قرار دهید. رنگ را با رنگ برند خود هماهنگ کنید:
.tavoos-free {
color: #1FAE57;
font-weight: 700;
}تست نهایی
چکلیست تست محصول رایگان
اگر تغییری نمیبینید، معمولاً کش سایت یا افزونهٔ کش مقصر است؛ کش را پاک کنید. برای شخصیسازی بیشتر ووکامرس، آموزش شخصیسازی فیلدهای پنل کاربری ووکامرس را هم ببینید.
فروشگاه اینترنتی حرفهای میخواهید؟طاووس وب فروشگاه ووکامرسی شما را با امکانات سفارشی، درگاه پرداخت، سرعت بالا و سئو از روز اول طراحی میکند.
طراحی سایت فروشگاهیسؤالات متداول محصول رایگان در ووکامرس
چطور در ووکامرس محصول رایگان تعریف کنم؟
در صفحهٔ ویرایش محصول، قیمت عادی را صفر وارد کنید. اگر فیلد قیمت را خالی بگذارید، محصول قیمت ندارد و دکمهٔ خرید هم نمایش داده نمیشود.
این کد را کجا قرار دهم؟
بهترین روش افزونهٔ Code Snippets است. روش دوم، انتهای فایل functions.php قالب فرزند است. کد را در قالب اصلی نگذارید چون با بهروزرسانی قالب پاک میشود.
چرا بعد از افزودن کد هنوز ۰ تومان نمایش داده میشود؟
معمولاً کش سایت یا افزونهٔ کش باعث این مشکل است؛ کش را پاک کنید. همچنین مطمئن شوید قیمت محصول دقیقاً صفر است و قالب شما قیمت را با فیلتر استاندارد ووکامرس نمایش میدهد.
آیا سفارش محصول رایگان به درگاه پرداخت نیاز دارد؟
خیر. وقتی جمع کل سفارش صفر باشد، ووکامرس مرحلهٔ پرداخت را نمایش نمیدهد و سفارش بدون درگاه ثبت میشود.
این کد روی محصولات متغیر هم کار میکند؟
بله. در محصول متغیر، اگر همهٔ متغیرها قیمت صفر داشته باشند «رایگان» نمایش داده میشود و اگر فقط بعضی رایگان باشند، بازهٔ قیمت معمول ووکامرس باقی میماند.