نمایش صحیح وضعیت موجودی محصولات یکی از مهمترین بخشهای مدیریت فروشگاه اینترنتی است. در بسیاری از فروشگاهها مشاهده میشود که حتی زمانی که محصول «ناموجود» است یا تمام متغیرهای آن تمام شدهاند، همچنان قیمت نمایش داده میشود و این موضوع میتواند باعث سردرگمی کاربران و کاهش اعتماد خریداران شود.
برای حل این مشکل، یک اسنیپت اختصاصی طراحی شده که به کمک آن، ووکامرس بهصورت هوشمند بررسی میکند که آیا محصول یا متغیرهای آن موجودی دارند یا خیر. در صورتی که محصول ساده یا متغیر ناموجود باشد، قیمت مخفی شده و عبارت «ناموجود» با استایل مشخص به کاربر نمایش داده میشود.
قبل از اجرای کد:
-
محصول A – موجود
-
محصول B – ناموجود
-
محصول C – موجود
-
محصول D – ناموجود
بعد از اجرای کد:
-
محصول A – موجود
-
محصول C – موجود
-
محصول B – ناموجود
-
محصول D – ناموجود
این اسنیپت علاوه بر اینکه از بروز اشتباه در نمایش قیمت جلوگیری میکند، باعث بهبود تجربه کاربری، افزایش شفافیت و کاهش تماسهای اضافی کاربران برای استعلام وضعیت موجودی میشود. همچنین فروشگاههایی که از صفحهساز Elementor استفاده میکنند، با این روش میتوانند کنترل دقیقتری روی نمایش قیمت در ویجتهای مرتبط داشته باشند.
استفاده از چنین کدی، فروشگاه را حرفهایتر، قابلاعتمادتر و کاربرپسندتر نشان میدهد؛ زیرا مشتری همیشه اطلاعات درست و بهروز در مورد وضعیت محصول مشاهده میکند. این موضوع بهخصوص برای محصولات متغیر که چندین تنوع دارند بسیار کاربردی است، چون ووکامرس بهصورت پیشفرض همیشه قیمت پایه را نمایش میدهد، حتی اگر تمام متغیرها ناموجود باشند.
با این اسنیپت، این مشکل به طور کامل برطرف میشود و کنترل نمایش قیمت کاملاً در اختیار مدیر سایت قرار میگیرد.
/**
*Author: TavTheme
* Website: https://tavtheme.com/
* Instagram: @tavtheme
*/
add_action('elementor/widget/render_content', function($content, $widget){
if ($widget->get_name() !== 'woocommerce-product-price') {
return $content;
}
global $product;
if (!$product) return $content;
// 📌 شرط جدید — اگر متای stock_status = outofstock بود
$meta_stock = get_post_meta($product->get_id(), '_stock_status', true);
if ($meta_stock === 'outofstock') {
return '<p class="price">
<span class="tav-call-price" style="color:#ff0000;font-weight:bold;">
ناموجود
</span>
</p>';
}
// --- محصولات ساده ---
if ($product->is_type('simple')) {
$has_price = $product->get_regular_price() !== '' && $product->get_regular_price() >= 0;
$out_of_stock = !$product->is_in_stock();
if ($out_of_stock && $has_price) {
return '<p class="price">
<span class="tav-call-price" style="color:#ff0000;font-weight:bold;">
ناموجود
</span>
</p>';
}
return $content;
}
// --- محصولات متغیر ---
if ($product->is_type('variable')) {
$variations = $product->get_available_variations();
$has_price = false;
$all_out_of_stock = true;
foreach ($variations as $v) {
$variation_obj = wc_get_product($v['variation_id']);
if ($variation_obj->get_regular_price() !== '' && $variation_obj->get_regular_price() >= 0) {
$has_price = true;
}
if ($variation_obj->is_in_stock()) {
$all_out_of_stock = false;
}
}
if ($has_price && $all_out_of_stock) {
return '<p class="price">
<span class="tav-call-price" style="color:#ff0000;font-weight:bold;">
ناموجود
</span>
</p>';
}
return $content;
}
return $content;
}, 20, 2);


