آموزش مخفی کردن قیمت محصولات ناموجود در ووکامرس
چندی قبل، یکی از کاربران مسترکد با ما سوالی در رابطه با مخفی کردن قیمت محصولات ناموجود در ووکامرس مطرح کرده بود. همانطور که میدانید وقتی موجودی محصولی در ووکامرس به اتمام برسد، هرچند موجودی محصول صفر شده و در صورت فعال بودن کنترل موجودی انبار، امکان سفارش محصول میسر نخواهد بود اما قیمت محصول مورد نظر کماکان در سایت به نمایش گذاشته خواهد شد. از آنجایی که به نظر میرسید این مسئله ممکن است برای افراد بسیاری ایده آل نباشد و خیلی از شما مایل باشید که قیمت محصولات خارج از موجودی را در فروشگاه خود مخفی کنید، به همین جهت تصمیم گرفتیم آموزش کوتاهی در زمینه مخفی کردن قیمت محصولات ناموجود در ووکامرس در سایت درج کنیم.
در آموزش امروز به شرح 3 روش ساده ولی موثر برای سفارشی کردن نحوه نمایش قیمت یا مخفی کردن آن در محصولات خارج از موجودی در ووکامرس خواهیم پرداخت. از شما دعوت میکنیم در ادامه ی آموزش با مسترکد همراه شوید.
روش 1 : مخفی کردن قیمت با استفاده از فیلتر های ووکامرس
در روش اول، قصد داریم از فیلتر های ووکامرس بهره بگیریم و کاری کنیم که قیمت محصولات به اتمام رسیده، چه در لیست محصولات و چه در صفحه ی خود محصول، به نمایش در نیاید. برای این کار کافی است کد زیر را به فایل functions.php قالب خود و یا افزونه ای طراحی شده مخصوص سایتتان اضافه کنید. (در این لینک روش ساختن افزونه برای وردپرس را شرح داده ایم)
1 2 3 4 5 6 7 8 9 10 | function mrcode_remove_outofstock_prices( $price, $product ) { if ( ! $product->is_in_stock() ) { $price = ''; } return $price; } add_filter( 'woocommerce_variable_sale_price_html', 'mrcode_remove_outofstock_prices', 10, 2 ); add_filter( 'woocommerce_variable_price_html', 'mrcode_remove_outofstock_prices', 10, 2 ); add_filter( 'woocommerce_get_price_html', 'mrcode_remove_outofstock_prices', 10, 2 ); |
پس از اضافه کردن کد بالا به سایتتان، خواهید دید که دیگر اثری از قیمت محصولات ناموجود در سایت دیده نمیشود.
روش 2 : مخفی کردن قیمت با استفاده از استایل CSS
روش دوم روشی کاملا ساده است. در این روش از استایل های CSS برای مخفی کردن قیمت و تعداد محصولات ناموجود در سایت کمک گرفته ایم. برای استفاده از این روش کافی است که دو خط کد زیر را به فایل استایل سایتتان در محل دلخواه اضافه کرده و یا در بین کدهای استایل سفارشی قالبتان قرار دهید (از طریق پنل تنظیمات قالب و یا با مراجعه به بخش css اضافی در سفارشی ساز قالب در پنل مدیریت وردپرس) :
1 2 | .outofstock .price{display:none} .outofstock .amount{display:none} |
این روش هرچند به درستی کار کرده و قیمت محصولات ناموجود را در سایت شما مخفی میکند اما یک نقطه ضعف دارد. ضعف این روش این است که در واقع قیمت محصول هنوز در کد سایت شما موجود است و هر شخصی با نگاه به سورس سایت شما میتواند قیمت را مشاهده کند. کد های بالا صرفا باعث میشوند که هرچند قیمت در سورس سایت موجود است، ولی در حالت گرافیکی سایت به کاربران نشان داده نشود.
روش 3 : مخفی کردن قیمت با سفارشی سازی تمپلیت های ووکامرس
روش سوم روش جالبی است. این روش قیمت محصول را در لیست محصولات مخفی نخواهد کرد اما به شما اجازه میدهد که در صفحه ی تکی محصولات ناموجود، پیغام دلخواه خود را بجای قیمت محصول به مشتریان خود نشان دهید. بنابراین ترکیب این روش با روش اول به نظر منطقی میرسد و میتواند شما را به نتایج ایده آلی برساند.
برای استفاده از این روش باید ابتدا در فولدر قالب خود به زیر فولدر woocommerce مراجعه کرده و سپس به زیر فولدر single-product بروید. یعنی مسیر زیر :
yourtheme/woocommerce/single-product
در مسیر بالا، منظور از yourtheme نام قالب شماست. اگر در قالبتان این مسیر را پیدا نکردید، نگران نباشید. (مثلا هرچند امکان استفاده از ووکامرس در قالب Twenty Seventeen وجود دارد ولی این قالب فاقد مسیر بالاست) در چنین حالتی کافی است که خودتان این مسیر را در قالبتان ایجاد کنید. پس از مراجعه به این مسیر یک فایل با نام price.php در این آدرس ساخته و کد زیر را در آن قرار دهید (دقت کنید که اینکودینگ فایل utf-8 باشد در غیر این صورت امکان استفاده از زبان فارسی در آن میسر نخواهد بود) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly global $post, $product; ?> <div itemprop="offers" itemscope itemtype="http://schema.org/Offer"> <p class="price"> <?php $stockamount = $product->get_stock_quantity(); $price = $product->get_price_html(); $pricelabel = "تماس بگیرید"; if($stockamount == 0) { echo $pricelabel; } else { echo $price; }; ?> </p> <meta itemprop="price" content="<?php echo $product->get_price(); ?>" /> <meta itemprop="priceCurrency" content="<?php echo get_woocommerce_currency(); ?>" /> <link itemprop="availability" href="http://schema.org/<?php echo $product->is_in_stock() ? 'InStock' : 'OutOfStock'; ?>" /> </div> |
تغییرات را در فایل ذکر شده ذخیره کنید. حالا اگر به صفحه ی محصولی که موجود نیست مراجعه کنید (یعنی خود محصول را باز کنید) خواهید دید که بجای قیمت محصول، عبارت “تماس بگیرید” به نمایش گذاشته شده است. شما میتوانید این پیام را به دلخواه خود سفارشی سازی کنید. برای این کار کافی است که در خط 11 کد بالا، بجای عبارت تماس بگیرید، عبارت دلخواه خود را قرار دهید.
از این روش میتوانید به صورت ترکیبی در کنار روش 1 استفاده کنید اما امکان استفاده همزمان آن با روش دوم وجود ندارد. در واقع اگر از این روش در کنار روش 1 استفاده کنید دو اتفاق رخ خواهد داد. اول اینکه قیمت محصول ناموجود، در لیست محصولات نشان داده نخواهد شد و دوم اینکه در صفحه محصول ناموجود، پیام دلخواه شما بجای قیمت برای مشتریان به نمایش در خواهد آمد.
سخن پایانی
در بالا 3 روش متنوع را برای مخفی کردن قیمت محصولات ناموجود در ووکامرس و سفارشی کردن نحوه نمایش قیمت برای این نوع محصولات به شما آموزش دادیم. طبق روال همیشه به شما توصیه میکنم که پیش از ویرایش فایل های سایت و قالب خود، اقدام به تهیه بکاپ از آنها بکنید تا در صورت بروز هر نوع مشکل، امکان بازگردانی سایتتان به حالت قبل برای شما به سادگی میسر باشد.
راستی طبق معمول توصیه میکنیم بجای ویرایش فایل functions.php تان، حتی الامکان، افزونه ای ویژه ی سفارشی سازی سایتتان ایجاد کرده و کدهای اینگونه را در همان افزونه قرار دهید تا مدیریت آنها نیز برای شما ساده تر باشد.
امیدواریم که از این آموزش ساده و نسبتا کوتاه لذت برده باشید.
خیلی خوب آموزش دادید.
موفق باشید.
درود بر شما. مطلب خوبی بود ، فقط یک سوال دارم من قالبی دارم که تو صفحه اصلی یا دسته ای عبارت ناموجود رو درج نمیکنه! قیمت زده وقتی وارد خوده محصول میشم نوشته ناموجود ! چطور میشه این عبارت رو اضافه کرد به محصولاتی که ناموجود هستند تو صفحه اصلی یا دسته ی اون محصول مثل اکثر قالب های دیگه؟
در روش اول جای قیمت خالی اتمام موجودی قرار دادم اگر بخواهیم رنگ فونت را تغییر دهیم چه کاری باید انجام دهیم؟
سلام. من یه وبسایت مربوط به پیک دارم و با دو تا فروشگاه قرارداد دارم و مسئولیت فروش محصول و پیک دست من هست. وقتی که فروشگاه نون تموم میکنه من باید تمام ساندویچ هاش رو ناموجود کنم که مشتری خرید نکنه. چطور میشه 20 تا محصول رو بصورت همزمان ناموجود کرد؟ مرسی
یک دنیا ممنون.
خیلی عالی بود، کلی کارم راحت شد
سلام
میخواستم محصولات متغییر که موجودی انبار صفر دارند، بین بقیه متغییر های، خود عنوان متغییر و قیمتش نمایش داده نشه
این چطور امکان پذیره؟
ممنون از شما
سلام من کدی که گفتین را وارد کردم ولی این پیغام داده شدو دیگه سایت بالا نمیاد چه کنم
برخی چیزها اشتباه شدند. تغییر شما ممکن است ذخیره نشده باشد. لطفاً دوباره تلاش نمایید. همچنین یک شانس وجود دارد که بتوانید به طور دستی مشکل را برطرف کنید و پرونده را از طریق FTP بارگذاری نمایید.
خیلی ممنون ار شما -من خیلی از آموزشاتون استفاده میکنم
سلام، وقت بخیر
من میخوام یک دسته بندی خاص از محصولات، در صفحه اصلی سایت یا حتی در کل فروشگاه نمایش داده نشود و فقط از طریق لینک یا سرچ قابل مشاهده باشه
چطور میشه این کار رو انجام داد
سلام این ویژگی و امکان در یکی از تب های افزونه یکپارچه تقویت کننده ووکامرس هست پیشنهاد میکنم تمامی عزیزان که سوال کرده بودن از این افزونه کمک بگیرند مشکل همه عزیزان حل میشود.
Booster For WooCommerce >> Add to Cart Button Labels
دانلود این افزونه در لینک زیر :
https://market.mrcode.ir/?p=15709
سلام ببخشید یک سوال من با استفاده از روش اول قیمت رو مخفی کردم ، اما به جای اون یه متن خاصی رو نوشتم نمایش داده شه .
این کد قیمت از همه قسمت های سایت مثل آرشیو ها پیچ shop غیره پاک می کنه … میشه این کد را تغییری داد که فقط در صفحه محصول اعمال شه باقی قسمت ها اعمال نشه ، یعنی در صفحه نمایش محصول فقط کار کنه در باقی قسمت ها خیر .