آموزش حل مشکل فیلتر همزمان دسته‌بندی و برچسب در لوپ المنتور پرو

یکی از مشکلات رایج هنگام طراحی سایت فروشگاهی، تداخل دسته‌بندی و برچسب در لوپ المنتور (Loop Grid) است. وقتی در طراحی «قالب آرشیو محصولات»، ویجت لوپ را بر اساس یک برچسب خاص فیلتر می‌کنید، المنتور باگ می‌دهد و دسته‌بندی فعلی صفحه را نادیده می‌گیرد. در نتیجه، به جای اینکه فقط محصولات همان دسته را نشان دهد، به اشتباه تمام محصولات کل سایت با آن برچسب را در خروجی لیست می‌کند.
آموزش حل مشکل فیلتر همزمان دسته‌بندی و برچسب در لوپ المنتور پرو
نویسنده:
|
مدیر فنی
آژانس خلاقیت کوانتا
تاریخ بروز رسانی:
اگه دوست داری کسی کارای دیجیتال مارکتینگت رو انجام بده، من اینجام که کمکت کنم. اینجا کلیک کن

برای حل این محدودیت، نیازی به نصب افزونه‌های سنگین و اضافی ندارید. ما باید با استفاده از یک فیلتر وردپرسی، المنتور را مجبور کنیم که تقاطع دقیقی بین «برچسب انتخابی» و «دسته‌بندی فعلی» ایجاد کند.

[preferred_source_button source_channel=”classic”]

کافیست قطعه‌کد زیر را کپی کرده و در فایل functions.php قالب چایلد (Child Theme) خود قرار دهید. اگر به فایل‌های قالب دسترسی ندارید، می‌توانید از افزونه‌هایی مانند Code Snippets برای اجرای این کد در بک‌اند سایت استفاده کنید.

// Fix WordPress bug: Apply tag and category conditions simultaneously in Elementor Loop
add_filter( 'woocommerce_shortcode_products_query', function( $query_args, $atts, $loop_name ) {
    if ( is_product_category() ) {
        $current_cat = get_queried_object();
        $has_tag = false;
        if ( isset( $query_args['tax_query'] ) ) {
            foreach ( $query_args['tax_query'] as $tax ) {
                if ( isset( $tax['taxonomy'] ) && $tax['taxonomy'] === 'product_tag' ) {
                    $has_tag = true;
                    break;
                }
            }
        }
        if ( $has_tag ) {
            $query_args['tax_query'][] = [
                'taxonomy'         => 'product_cat',
                'field'            => 'term_id',
                'terms'            => $current_cat->term_id,
                'include_children' => true,
            ];
            $query_args['tax_query']['relation'] = 'AND';
        }
    }
    return $query_args;
}, 10, 3 );

 

دلیل فنی تداخل دسته‌بندی و برچسب در المنتور

در معماری سیستم کوئری‌بیلدر المنتور پرو، برای نمایش شبکه‌ای محصولات از کلاس پایه WP_Query در وردپرس استفاده می‌شود. زمانی که شما یک قالب آرشیو (Archive Template) طراحی می‌کنید، ویجت المنتور برای درک اینکه کاربر در کدام صفحه قرار دارد، به خواندن کوئری جاری صفحه (Current Query) وابسته است.

باگ تداخل زمانی رخ می‌دهد که شما یک فیلتر تکمیلی (مانند انتخاب Product Tag) را در تنظیمات ویجت Loop Grid اعمال می‌کنید:

  • از دست رفتن کانتکست (Context Loss): المنتور به محض دریافت فیلتر دستی برچسب، کوئری پیش‌فرض صفحه آرشیو را کاملاً نادیده گرفته و یک کوئری سفارشی (Custom Query) را جایگزین آن می‌کند. به همین دلیل سیستم فراموش می‌کند که کاربر در حال حاضر داخل کدام دسته‌بندی قرار دارد.
  • عدم ادغام خودکار تکسونومی‌ها: المنتور به صورت پیش‌فرض مکانیزمی برای ترکیب همزمان فیلترهای آرشیو (product_cat) و فیلترهای سفارشی ویجت (product_tag) در حالت لوپ ندارد و دومی را روی اولی بازنویسی (Override) می‌کند.

 

کد بالا چگونه این مشکل المنتور را حل می‌کند؟

این قطعه‌کد دقیقا پیش از آنکه المنتور اطلاعات محصولات را از دیتابیس فراخوانی کند، وارد عمل می‌شود. سیستم ابتدا به صورت هوشمند تشخیص می‌دهد که کاربر در حال حاضر داخل کدام دسته‌بندی از سایت قرار دارد.

سپس، به جای رفتار صفر و یکی المنتور، یک دستور اجباری به هسته وردپرس ارسال می‌کند تا یک «تقاطع شرطی» ایجاد کند. به زبان ساده، وردپرس را وادار می‌کند که هر دو فیلتر را به صورت همزمان بررسی کند؛ در نتیجه، در صفحه آرشیو تنها محصولاتی به نمایش درمی‌آیند که هم برچسب انتخاب‌شده را داشته باشند و هم دقیقا زیرمجموعه همان دسته‌بندی فعلی کاربر باشند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آموزش‌های کاربردی وب برای طراحان، توسعه‌دهندگان و متخصصان سئوی وردپرس
بازدید بیشتری از گوگل می‌خوای؟

درباره پیمان فراهانی

پیمان فراهانی هستم و الان مدیر فنی آژانس خلاقیت کوانتا

حدودا ۱۰ سال هست که به عنوان یه دیجیتال مارکتر در چند شاخه تخصصی این حوزه مثل سئو، طراحی و توسعه سایت‌های وردپرسی، سایت‌های فروشگاهی، تبلیغات و برندینگ دیجیتال، ویژوال دیزاین، طراحی و مدیریت محصول در حال فعالیت هستم و به برندهای زیادی برای رشد در فضای دیجیتال کمک کردم