آیا تا به حال برایتان پیش آمده که بخواهید ۱۰۰ محصول جدید را که بهصورت پیشفرض در دسته «Uncategorized» یا «بدون دستهبندی» قرار گرفتهاند، مرتب کنید؟ شما همه آنها را انتخاب میکنید، ویرایش گروهی را میزنید و دسته جدید (مثلاً «پوشاک») را انتخاب میکنید. اما بعد از ذخیره، با یک صحنه آزاردهنده روبرو میشوید:
محصولات شما حالا در هر دو دسته قرار دارند: هم «پوشاک» و هم «بدون دستهبندی»!
این یکی از رفتارهای پیشفرض ووکامرس است که در ویرایش گروهی (Bulk Edit)، دستههای جدید را به دستههای قبلی اضافه (Append) میکند، نه محتوای اصلی مقاله
آیا تا به حال برایتان پیش آمده که بخواهید ۱۰۰ محصول جدید را که بهصورت پیشفرض در دسته «Uncategorized» یا «بدون دستهبندی» قرار گرفتهاند، مرتب کنید؟ شما همه آنها را انتخاب میکنید، ویرایش گروهی را میزنید و دسته جدید (مثلاً «پوشاک») را انتخاب میکنید. اما بعد از ذخیره، با یک صحنه آزاردهنده روبرو میشوید:
محصولات شما حالا در هر دو دسته قرار دارند: هم «پوشاک» و هم «بدون دستهبندی»!
این یکی از رفتارهای پیشفرض ووکامرس است که در ویرایش گروهی (Bulk Edit)، دستههای جدید را به دستههای قبلی اضافه (Append) میکند، نه اینکه آنها را جایگزین (Replace) کند. اما نگران نباشید؛ ما در گروه طراحی سایت آوا راهکاری دقیق و تست شده برای این موضوع آماده کردهایم.
در این مقاله، یک قطعه کد (Snippet) اختصاصی را معرفی میکنیم که هوشمندانه عمل میکند: اگر محصولی دستهبندی جدیدی گرفت، بهطور خودکار دسته «بدون دستهبندی» را از آن حذف میکند.
چرا این اتفاق میافتد؟
ووکامرس به گونهای طراحی شده که محتاط باشد. وقتی شما به صورت گروهی محصولاتی را ویرایش میکنید، فرض را بر این میگذارد که شاید بخواهید این محصولات را به یک کالکشن جدید اضافه کنید، بدون اینکه دستهبندیهای قبلیشان از بین برود.
اما در ۹۰٪ مواقع، مدیران سایتها وقتی محصولی را از حالت پیشفرض خارج میکنند، میخواهند که برچسب «بدون دستهبندی» از روی آن برداشته شود. انجام دستی این کار برای تکتک محصولات، کابوس است. پس بیایید دست به کد شویم.
قطعه کد جادویی برای حل مشکل
کد زیر دقیقا همان چیزی است که نیاز دارید. این کد روی اکشنِ ذخیرهسازی ویرایش گروهی سوار میشود و بررسی میکند که اگر محصول دستهی جدیدی گرفت، دستهی پیشفرض را حذف کند.
/**
* حذف خودکار دسته “بدون دستهبندی” هنگام ویرایش گروهی محصولات
* منتشر شده توسط: گروه طراحی سایت آوا (avasite.ir)
*/
add_action( ‘woocommerce_product_bulk_edit_save’, ‘remove_uncategorized_on_bulk_edit’, 20, 1 );function remove_uncategorized_on_bulk_edit( $product ) {
// گرفتن شناسه محصولی که در حال ویرایش است
$product_id = $product->get_id();// دریافت تمام دستههای فعلی محصول (شامل مواردی که همین الان تیک زدید)
$current_cats = wp_get_post_terms( $product_id, ‘product_cat’, array( ‘fields’ => ‘ids’ ) );// پیدا کردن آیدی دسته “بدون دستهبندی” به صورت پویا (چون ممکن است در هر سایتی متفاوت باشد)
$default_cat_id = get_option(‘default_product_cat’);// شرط اصلی: اگر محصول بیش از یک دسته داشت و یکی از آنها “بدون دستهبندی” بود
if ( count( $current_cats ) > 1 && in_array( $default_cat_id, $current_cats ) ) {// حذف آیدی دسته پیشفرض از لیست دستهها
$updated_cats = array_diff( $current_cats, array( $default_cat_id ) );// بهروزرسانی نهایی دستههای محصول
wp_set_post_terms( $product_id, $updated_cats, ‘product_cat’ );
}
}
چطور از این کد استفاده کنیم؟
برای استفاده از این کد در سایت وردپرسی خود، دو راه مطمئن پیش رو دارید. پیشنهاد تیم فنی آوا استفاده از روش دوم است.
روش اول: قرار دادن در فایل Functions.php (برای حرفهایها)
وارد پیشخوان وردپرس شوید.
به مسیر نمایش > ویرایشگر پرونده پوسته بروید.
فایل
functions.phpرا انتخاب کنید.کد بالا را در انتهای این فایل قرار داده و ذخیره کنید.
روش دوم: استفاده از افزونه Code Snippets (روش پیشنهادی)
اگر نمیخواهید فایلهای قالب خود را دستکاری کنید (که کار عاقلانهای است)، افزونه رایگان Code Snippets را نصب کنید.
افزونه را نصب و فعال کنید.
یک Snippet جدید بسازید.
کد را درون آن کپی کنید.
گزینه “Run snippet everywhere” را انتخاب کرده و ذخیره کنید.
تحلیل فنی کد (برای علاقهمندان به یادگیری)
بیایید نگاهی دقیقتر به منطق این کد بیندازیم تا بدانید دقیقاً چه اتفاقی در سایتتان میافتد:
هوک (Hook): ما از
woocommerce_product_bulk_edit_saveاستفاده کردهایم. این هوک دقیقا در لحظهای که دکمه “Update” را در ویرایش گروهی میزنید، فعال میشود.پویایی کد: خط
$default_cat_id = get_option('default_product_cat');بسیار مهم است. ممکن است شما نام دسته «بدون دستهبندی» را تغییر داده باشید یا آیدی آن در دیتابیس شما عدد 15 باشد (نه لزوما 1). این خط باعث میشود کد در هر سایتی درست کار کند.شرط منطقی: کد ما بیگدار به آب نمیزند! فقط زمانی دسته پیشفرض را حذف میکند که:
محصول بیشتر از یک دسته داشته باشد (
count > 1). یعنی مطمئن شویم شما دسته جدیدی اضافه کردهاید. اگر محصول فقط در دسته «بدون دستهبندی» باشد، به آن دست نمیزند تا محصول بدون دسته نماند.دسته پیشفرض حتماً جزو دستههای محصول باشد.
نتیجهگیری
مدیریت یک فروشگاه ووکامرسی بزرگ نیاز به ابزارهایی دارد که در زمان شما صرفهجویی کنند. با اضافه کردن این چند خط کد ساده که توسط تیم آوا سایت بررسی و تایید شده است، دیگر نیازی نیست نگران دستهبندیهای تکراری و بههمریخته باشید. ویرایش گروهی انجام دهید و لذت ببرید!
اگر در اجرای این کد سوالی داشتید یا نیاز به تغییرات اختصاصیتری در فروشگاه ووکامرس خود دارید، بخش نظرات همین پست برای شما باز است.
نکته مهم: همیشه قبل از اضافه کردن کدهای جدید به فایلهای هسته یا فانکشن، یک بکآپ (نسخه پشتیبان) از سایت خود تهیه کنید.


بدون نظر