ZentrixCode — در حال آماده‌سازی تجربه

لطفاً چند لحظه صبر کنید — دارم همه چیز رو برات بارگذاری می‌کنم. عملکرد و جلوه‌ها بهینه می‌شن...

اتصال امن — تجربهٔ سریع

آموزش فیلتر کردن محصولات ووکامرس بر اساس پوسته فعال (با کدنویسی ساده در وردپرس)

فهرست مطالب

چکیده (Meta description)

در این راهنمای جامع یاد می‌گیرید چگونه محصولات ووکامرس را بر اساس پوسته (Theme) فعال سایت سازمان‌دهی و نمایش دهید. روش پیشنهادی کم‌هزینه، امن و قابل‌گسترش است و به‌راحتی می‌توان آن را در محیط‌های تک‌سایتی یا مولتی‌سایت پیاده‌سازی کرد. مناسب برای توسعه‌دهندگان و مدیران فروشگاه.


مقدمه — چرا فیلتر بر اساس پوسته؟

در پروژه‌های فروشگاهی مدرن، گاهی لازم است محتوا و محصولات تنها بر اساس معیارهای مرسوم (دسته، برچسب، قیمت) نمایش داده نشوند. یکی از معیارهای کاربردی اما کمتر متداول، «پوستهٔ فعال سایت» است. مثلاً در مارکت‌پِیس قالب یا فروشگاهی که محصولات طراحی‌شده برای قالب‌های مختلف را می‌فروشد، نمایش محصولات مختص هر قالب باعث افزایش وضوح، سازگاری ظاهری و تجربهٔ کاربری بهتر می‌شود. این راهکار به مدیران اجازه می‌دهد مجموعه‌های محصول مرتبط با هر پوسته را به‌صورت خودکار مدیریت و نمایش دهند.


دیدکلی و اصول معماری (بدون جزئیات پیاده‌سازی)

  1. تعریف یک مکانیزم برچسب/تاکسونومی اختصاصی: برای نگاشت محصولات به پوستهٔ مورد نظر باید یک ساختار نگهداریِ ارتباط (مثل برچسب) داشته باشیم که بتواند نام پوسته را ذخیره کند.

  2. اختصاص خودکار پوسته به محصول هنگام ایجاد: هر زمان محصول جدیدی ساخته می‌شود، باید به‌صورت خودکار مقدار نام پوستهٔ فعال به عنوان مقدارِ این برچسب اختصاص یابد.

  3. فیلترِ نمایش محصول در فرانت‌اند و در پنل مدیریت: هنگام نمایش لیست محصولات در سایت یا در پنل ادمین، کوئری‌ها باید طوری محدود شوند که فقط محصولات مطابِق با پوستهٔ جاری نشان داده شوند.

  4. نمایش در صفحات و منوها: با ایجاد یک برگهٔ اختصاصی یا ویجتِ مناسب، می‌توان لیست محصولات مرتبط با پوسته را برای کاربران نمایش داد و لینک آن را در فهرست سایت قرار داد.


مزایا و موارد استفاده

  • سازگاری ظاهری: کاربران تنها محصولاتی را می‌بینند که برای قالبِ سایتشان طراحی یا بهینه شده‌اند.

  • بهبود مدیریت: مدیران می‌توانند راحت‌تر محصولات مرتبط با هر پوسته را بیابند و ویرایش کنند.

  • پشتیبانی و بازارچه قالب: در مارکت‌پِیس‌ها، هر صفحهٔ قالب می‌تواند لیست محصولات سازگار خود را داشته باشد؛ این موضوع نرخ تبدیل را افزایش می‌دهد.

  • بک‌اند ساده‌تر: استفاده از ساختارهای موجود وردپرس (مانند تاکسونومی‌ها) از ایجاد جداول جدید یا پیچیدگی دیتابیس جلوگیری می‌کند.


گام‌های عملی (آنچه باید انجام شود )

  1. ایجاد یک تاکسونومیِ اختصاصی که شناسه‌ای برای ذخیرهٔ «اسلاگ پوسته» داشته باشد. این تاکسونومی مثل یک برچسب عمل می‌کند و برای هر محصول می‌توان چندین مقدار داشت.

  2. اختصاص خودکار: هنگام ذخیرهٔ محصول جدید، مقدار اسلاگِ پوستهٔ فعال سایت خوانده می‌شود و به عنوان مقدار تاکسونومی به محصول الصاق می‌گردد. این کار باید تنها در زمان ایجاد اولیه محصول انجام شود تا در آپدیت‌های بعدی بدون تغییر بماند مگر بخواهی.

  3. فیلتر نمایش در فرانت‌اند: قبل از اجرا شدن کوئریِ نمایش محصولات در صفحات آرشیو یا فروشگاه، کوئری را طوری محدود کن که فقط محصولاتی که تاکسونومی‌شان برابر اسلاگِ پوستهٔ فعلی است، بازگردانده شوند. همچنین در صورت نیاز می‌توان تعداد نتایج نمایش داده‌شده را تنظیم کرد.

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

  5. ایجاد برگهٔ توضیحی و لینک در فهرست: برای نمایش به کاربر یک برگه بساز که شامل توضیح، عنوان مناسب و لینک به لیست محصولاتِ مربوط به پوسته باشد و آن را به منو اضافه و/یا در ویجت فهرست نمایش بده.


تجربهٔ کاربری (UX) و نمایش برای بازدیدکننده

  • بالای لیست محصولات یک متن کوتاه قرار بده که توضیح دهد «این محصولات برای پوستهٔ X مناسب هستند». متن باید ساده و گویا باشد تا کاربر بداند چرا محصولات محدود شده‌اند.

  • امکان برگشت برای دیدن تمام محصولات (غیر فیلترشده) را نیز در صفحه قرار بده تا کاربر اگر می‌خواهد مجموعهٔ کامل را ببیند، دسترسی داشته باشد.

  • برای فیلترهای بیشتر، می‌توان گزینه‌های مرتب‌سازی (قیمت، تاریخ، محبوبیت) و یک فیلتر AJAX اضافه کرد تا تجربه تعاملی بدون رفرش به کاربر داده شود.


SEO و محتوا

  • عنوان صفحه: عنوان باید شامل نام پوسته و کلیدواژهٔ هدف باشد (مثلاً «محصولات سازگار با پوستهٔ X — [نام سایت]»).

  • متای توضیحات: یک توضیحات 140–160 کاراکتری آماده کن که هدف صفحه را توضیح دهد و بازدیدکننده را به کلیک ترغیب کند.

  • متن بدنه: بالای لیست محصولات حداقل 150–300 کلمه متن توضیحی قرار بده که شامل مزایا، کاربردها و راهنمایی کوتاه برای انتخاب شود — این متن به ایندکس شدن صفحه کمک می‌کند.

  • نشانه‌گذاری ساختارمند (Schema): در صورت امکان از Schema.org برای لیست محصولات استفاده کن تا موتورهای جستجو اطلاعات بیشتری دریافت کنند.


نکات مرتبط با عملکرد و کش (Performance & Caching)

  • اگر از کش صفحه یا object-cache استفاده می‌کنی، توجه کن که آرشیوها بر اساس پوستهٔ فعال متفاوت هستند؛ بنابراین باید کلیدهای کش شامل شناسهٔ پوسته یا واریاسیون مناسب باشند تا کاربر صفحهٔ مناسب را ببیند.

  • tax-queryها معمولاً سبک هستند ولی اگر تعداد محصولات و ترم‌ها بسیار زیاد شد، بررسی و پروفایل‌گیری SQL پیشنهاد می‌شود تا از بارگذاری سنگین جلوگیری شود.

  • در نمایش تعداد بالای محصول، از بارگذاری تنبل (lazy load) تصاویر و pagination/AJAX استفاده کن تا صفحه سریع بماند.


مدیریت محصولات موجود (Reassign / Bulk)

اگر مجموعهٔ بزرگی از محصولات قبلاً وارد شده‌اند و می‌خواهی مقدار تاکسونومی برای آنها تنظیم شود، پیشنهاد می‌شود قبل از اجرا گرفتن بکاپ کامل از دیتابیس و سپس یک اسکریپت یا ابزار (مثلاً WP-CLI یا یک عملیات دسته‌ای) اجرا شود که برای همهٔ محصولات مقدار اسلاگِ پوستهٔ فعلی را اضافه کند. اجرای این کار باید با دقت و پس از تست در محیط staging انجام شود.


نکات امنیتی و دسترسی‌ها

  • هر عملیات دسته‌ای یا endpointهای احتمالی برای ارائه داده‌ها باید تنها برای کاربران دارای دسترسی مناسب (مثلاً مدیر) قابل اجرا باشد.

  • اگر قرار است اطلاعات از طریق REST API منتشر شود، از nonceها و بررسی capability استفاده کن.

  • هنگام تغییر ساختار نمایش یا افزودن شورت‌کدهایی که محتوای محصول را نشان می‌دهند، بررسی کن که هیچ دادهٔ محرمانه یا مدیریتی به کاربر نهایی نشان داده نشود.


عیب‌یابی (Troubleshooting)

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

  • لیست‌ها نمایش کامل ندارند: ممکن است فیلتری دیگر یا افزونه‌ای کوئری را تغییر دهد؛ بررسی مرتب‌سازهای دیگر و اولویت hookها لازم است.

  • مشکلات pagination یا شمارش کل نتایج: تغییر مستقیم posts_per_page یا دستکاری کوئری می‌تواند با روش pagination قالب تداخل کند؛ در این حالت از روش‌های جایگزین یا محاسبهٔ دستی استفاده کن.

  • Cache نمایش قدیمی: پس از اعمال تغییرات، کش صفحات و object-cache را پاک کن تا صفحهٔ جدید نمایان شود.


ایده‌های توسعه‌ای برای آینده

  • افزودن امکان انتخاب پوسته در صفحهٔ ویرایش محصول (برای override) تا مدیر بتواند پوستهٔ دلخواه را برای یک محصول مشخص انتخاب کند.

  • ارائه فیلتر AJAX برای تجربهٔ کاربری سریع‌تر بدون رفرش.

  • گزارش‌گیری مدیریتی: آمار محصولات بر اساس پوسته، محصولات پرفروش در هر پوسته و …

  • هماهنگی با افزونه‌های چندزبانه و راهکارهای Headless (REST API) برای ارائه داده‌ها در اپلیکیشن‌ها یا SPAها.


متن کوتاه مناسب برای ویجت فهرست (Widget-friendly)

این بخش محصولات سازگار با پوستهٔ فعلی سایت را نمایش می‌دهد — انتخاب‌شده برای هماهنگی ظاهری و تجربهٔ بهتر کاربری. برای مشاهدهٔ همهٔ محصولات مرتبط، روی لینک کلیک کنید.


کد ها و توصیه ها

  1. تست کامل در محیط staging.

  2. بکاپ کامل دیتابیس قبل از اعمال در سایت لایو.

  3. پاک‌سازی کش پس از انتشار.

  4. بررسی نمایش برای نقش‌های مختلف کاربری.

  5. اجرای اسکریپت بازتخصیص (اگر لازم است) با احتیاط و پس از بکاپ.

  6. به‌روزرسانی متن‌ بالای لیست برای SEO و تجربهٔ کاربری.

کد ها

در فایل function.php قرار داده شود

				
					<?php
// 1) ثبت یک تاکسونومی (برچسب ویژه) به نام "theme_name" برای محصولات
// این کار مثل اضافه کردن یک فیلتر ساده برای محصولات است.
// 'theme_name' یک نام فنی است، و 'پوسته محصول' نامی است که در پنل ادمین نشان داده می‌شود.
function register_theme_taxonomy() {
    register_taxonomy(
        'theme_name',      // نام تاکسونومی (slug)
        'product',         // برای چه نوع نوشته‌ای است (اینجا محصول)
        array(
            'label'        => 'پوسته محصول',   // نام نمایشی در پنل
            'hierarchical' => false,           // غیر سلسله‌مراتبی (مثل برچسب است)
            'public'       => true,            // عمومی باشد
            'rewrite'      => array('slug' => 'theme-name'), // آدرس پاک‌سازی شده
            'show_admin_column' => true,       // ستون در لیست محصولات در پنل نمایش داده شود
        )
    );
}
add_action('init', 'register_theme_taxonomy');



// 2) وقتی یک محصول جدید ساخته می‌شود، خودکار پوسته‌ی فعال سایت را به آن اختصاص بده
// این تابع با اکشن wp_insert_post اجرا می‌شود.
// پارامترها: $post_id = شناسه پست، $post = آبجکت پست، $update = آیا این یک به‌روز رسانی است؟
function auto_assign_theme_to_product($post_id, $post, $update) {
    // اگر این پست محصول نیست، کاری نکن
    if ($post->post_type !== 'product') return;

    // اگر این یک آپدیت است (یعنی محصول قبلاً وجود داشته)، کاری نکن.
    // فقط زمانی که محصول تازه ایجاد شده باشد، اختصاص پوسته انجام شود.
    if ($update) return;

    // پوسته‌ی فعلی سایت را بگیر
    $current_theme = wp_get_theme();
    // اسلاگ (شناسه) پوسته را بگیر (نام پوشه قالب)
    $theme_slug = $current_theme->get_stylesheet();

    // برای این محصول، ترم (term) با آن اسلاگ را در تاکسونومی 'theme_name' تنظیم کن
    wp_set_object_terms($post_id, $theme_slug, 'theme_name', false);
}
add_action('wp_insert_post', 'auto_assign_theme_to_product', 10, 3);



// 3) در بخش جلوی سایت (فرانت‌اند) فقط محصولات مربوط به پوسته‌ی فعال را نشان بده
// این تابع قبل از گرفتن پست‌ها اجرا می‌شود و کوئری اصلی را دستکاری می‌کند.
function filter_products_by_theme($query) {
    // فقط در فرانت‌اند (پنل ادمین را رد کن)، فقط برای کوئری اصلی، و وقتی صفحه آرشیو محصولات یا صفحه فروشگاه است
    if (!is_admin() && $query->is_main_query() && (is_post_type_archive('product') || is_shop())) {

        // اسم پوسته فعلی را بگیر
        $current_theme = wp_get_theme();
        $theme_slug = $current_theme->get_stylesheet();

        // مثال: تعداد نمایش محصولات را به 4 محدود کن
        $query->set('posts_per_page', 4);

        // اضافه کردن شرط تاکسونومی تا فقط محصولاتی با ترم پوسته فعلی بیاید
        $query->set('tax_query', array(
            array(
                'taxonomy' => 'theme_name',
                'field'    => 'slug',
                'terms'    => $theme_slug,
            ),
        ));
    }
}
add_action('pre_get_posts', 'filter_products_by_theme');



// 4) در پنل مدیریت (وردپرس ادمین) هم لیست محصولات را فیلتر کن تا فقط محصولات مربوط به پوسته فعلی نشان داده شود
function admin_filter_products_by_theme($query) {
    // فقط در پنل ادمین، برای کوئری اصلی و وقتی نوع پست 'product' است
    if (is_admin() && $query->is_main_query() && $query->get('post_type') === 'product') {

        // اسم پوسته فعلی را بگیر
        $current_theme = wp_get_theme();
        $theme_slug = $current_theme->get_stylesheet();

        // شرط تاکسونومی برای پنل ادمین
        $query->set('tax_query', array(
            array(
                'taxonomy' => 'theme_name',
                'field'    => 'slug',
                'terms'    => $theme_slug,
            ),
        ));
    }
}
add_action('pre_get_posts', 'admin_filter_products_by_theme');



				
			

یک پاسخ به “آموزش فیلتر کردن محصولات ووکامرس بر اساس پوسته فعال (با کدنویسی ساده در وردپرس)”

  1. اگر سوالو یا پیشنهاد و انتقادی دارید در همین بخش مطرح کنید

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

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