بسیاری از کاربران این سوال را پرسیده اند که چگونه میشود کاری کرد تا در صفحات نمایش محصولات در ووکامرس محصولات ناموجود را در انتهای لیست نمایش داد تا کاربران مجبور نشوند محصولات ناموجود را هم برای یافتن محصولات موجود مورد نظر خود مشاهده کنند و به صفحات بعد مراجعه کنند. خب در این مطلب آموزش ووکامرس به شما نشان خواهم داد که این کار در حین ممکن بودن بسیار ساده است.
نمایش محصولات ناموجود در انتهای لیست فروشگاه
به عنوان مدیر یک فروشگاه شما باید کاری انجام دهید که کاربران بتوانند محصول مورد نظر خود را به سرعت بیابند و وقت خود را کمتر صرف یافتن آن کنند. یکی از کار هایی که میتواند به شما در انجام این وظیفه کمک کند نمایش محصولات ناموجود در انتهای لیست محصولات فروشگاه است. اگر میخواهید این کار را در فروشگاه خود انجام دهید باید بدانید که در این مطلب با استفاده از یک کد به شما آموزش خواهم داد تا این کار را به سادگی انجام دهید.
شروع کار
برای نمایش محصولات فروشگاه بر اساس موجودی شما میتوانید به سادگی کد زیر را در فایل functions.php قالب وردپرس خود قرار دهید:
/** * Sorting out of stock WooCommerce products - Order product collections by stock status, in-stock products first. */ class iWC_Orderby_Stock_Status { public function __construct() { // Check if WooCommerce is active if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) { add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000); } } public function order_by_stock_status($posts_clauses) { global $wpdb; // only change query on WooCommerce loops if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) { $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) "; $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby']; $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where']; } return $posts_clauses; } } new iWC_Orderby_Stock_Status; /** * END - Order product collections by stock status, instock products first. */
در کد بالا ابتدا چک میشود که آیا بر روی سایت شما ووکامرس نصب شده است یا خیر، اگر اینطور باشد یک کوئری برای نمایش محصولات موجود استفاده خواهد شد که باعث خواهد شد تا در ابتدای صفحه محصولات موجود نمایش داده شوند و محصولات ناموجود نیز در انتهای لیست قرار بگیرند.
امیدوارم با استفاده از ترفند بالا توانسته باشید این قابلیت را برای کاربران خود فراهم نمایید، اگر روش بهتری را برای انجام این کار میدانید میتوانید آن را به ما اطلاع بدهید.
ممنون بسیار عالی بود
سلام خیلی ممنون از راهنماییتون مشکل من هم تقریبا حل شد
یه سوال داشتم یه دکمه داره سایت دیجیکالا که میزنه فقط محصولات موجود رو نشان بده
برای اینکار افزونه یا کدی اماده هست ووکامرس بشه انجام داد ؟
خودم کد نویسی بلد نیستم حقیقت
بازم ممنون از مطلب مفیدتون
سلام پوریا عزیز
خوشحالیم که این آموزش مورد رضایت و استفاده شما قرار گرفته
برای این کار باید افزونه فیلتر پیشرفته ووکامرس نصب کنید.
موفق باشید
سلام
ممنون از مطلب مفیدتون
اگر بخوام تو صفحه جزئیات محصول، اگر محصول موجود نبود ابتدا محصولات مرتبط رو نشون بده و بعد خود محصول رو چیکار باید بکنم؟
سلام دوست گرامی
من هر کجای functions.php این کد رو میذارم با خطا رو به رو میشم تو بخش محصولاتم. ممنون میشم راهنمایی بفرمایید دقیقا کجا باید paste کنیم ؟
سلام آقا حسین
به آخر فایل اضافه کنید. چه اروری دریافت میکنید ؟
سلام
در صورت امکان راهنمایی کنید در صفحه اول چطور میشه کاری کرد که محصولات نا موجود به انتهای لیست منتقل بشن.
ممنون
سلام جناب محمدی
کد زیر رو تست بفرمایید.
add_filter('posts_clauses', 'order_by_stock_status');
function order_by_stock_status($posts_clauses) {
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
سلام
ممنون بابت این آموزش کاربردی
آیا امکانش هست براساس جدیدترین نمایش داده بشه؟
یعنی جدید ترین محصولات موجود بالا باشه به طور پیش فرض و به ترتیب بقیه محصولات
تشکر
سلام
خواهش میکنم
بله باید در قسمت order این تغییر انجام بشه
سلام. من در صفحه اولم از صفحه ساز WP Bakery استفاده کردم. الان محصولاتی که توسط این افزونه نمایش داده میشه محصولات موجود و ناموجود را درهم نمایش میدهد. میتونم برای این قسمت هم از این کد استفاده کنم؟؟
سلام میلاد عزیز
این کد فقط برای صفحه “فروشگاه” ووکامرس هست نه قسمت های دیگه
سلام
بسیار کاربردی بود
ممنون
خیلی خوب آموزش دادید.
موفق باشید.
ممنونم عالی بود