بهینه چی | افزونه حرفهای بهینهسازی تصاویر وردپرس
WordPress image optimization plugin
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/ehsandev2008/behine-chi/archive/refs/heads/main.zip🌐 English
بهینه چی | افزونه حرفهای بهینهسازی تصاویر وردپرس
بهینه چی یک افزونه قدرتمند وردپرس برای بهینهسازی و فشردهسازی تصاویر است که فرآیند تبدیل خودکار به فرمتهای نسل جدید (WebP و AVIF)، تغییر ابعاد، حذف متادیتای EXIF، واترمارکگذاری و بهینهسازی فایلهای SVG را به صورت کاملاً محلی بر روی سرور و بدون نیاز به سرویسهای ابری یا کلیدهای API خارجی انجام میدهد.
📋 فهرست مطالب
- قابلیتها و ویژگیها
- پیشنیازهای سیستمی
- نصب و راهاندازی
- نحوه استفاده
- تنظیمات و پیکربندی
- ساختار پایگاه داده
- اندپوینتهای AJAX
- عیبیابی و تست سلامت سیستم
- مجوز
- توسعهدهنده
🚀 قابلیتها و ویژگیها
۱. تبدیل و فشردهسازی تصاویر
- تولید فرمتهای نسل جدید: تبدیل خودکار فرمتهای
JPEG،PNGوWebPبه دو فرمت بهینهWebPوAVIF. - موتور پردازش دوگانه (Dual Engine):
- Imagick: درایور اصلی برای پردازش و تبدیل با کیفیت بالا در صورت فعال بودن اکستنشن
imagickدر PHP. - GD Library: درایور جایگزین (Fallback) مستقل در صورت در دسترس نبودن Imagick.
- Imagick: درایور اصلی برای پردازش و تبدیل با کیفیت بالا در صورت فعال بودن اکستنشن
- کنترل کیفیت: امکان تعیین درصد کیفیت فشردهسازی تصاویر اتلافی (۱ تا ۱۰۰ درصد، پیشفرض: ۷۵٪).
- هماهنگی با ادیتور تصویر وردپرس: اتصال به فیلتر
image_editor_output_formatجهت صدور خروجی بندانگشتیهای وردپرس به صورتWebPیاAVIF.
۲. مدیریت ابعاد و متادیتا
- تغییر ابعاد خودکار (Resize): کاهش ابعاد تصاویری که از حداکثر عرض و طول تعیینشده (پیشفرض: ۲۵۶۰×۲۵۶۰ پیکسل) فراتر میروند با حفظ نسبت ابعاد تصویر.
- حذف اطلاعات EXIF: پاکسازی متادیتای اضافی دوربین (مانند مدل دوربین، موقعیت جغرافیایی GPS و زمان ثبت تصویر) جهت کاهش حجم فایل.
- محدودیت حجم ورودی: عبور از فایلهایی که حجم آنها از حداکثر تعیینشده (به مگابایت) بیشتر است برای حفظ منابع پردازشی سرور.
۳. بهینهسازی فایلهای SVG
- فشردهسازی خالص با PHP: دارای بهینهساز مستقل (
WSO\Engine\SVG_Optimizer) برای حذف اعلانهای اضافه XML، توضیحات، تگهای Doctype و فضاهای خالی. - بررسی اعتبار و امنیت: اعتبارسنجی تگ ریشه
<svg>و پارس امن XML قبل از ذخیره نهایی فایل.
۴. موتور درج واترمارک (Watermark)
- پشتیبانی از فرمتهای مختلف: درج واترمارک شفاف PNG با استفاده از هر دو موتور GD و Imagick.
- ۹ موقعیت مکانی مختلف:
top-left،top-center،top-right،center-left،center،center-right،bottom-left،bottom-center،bottom-right. - تنظیمات دقیق: امکان تنظیم شفافیت واترمارک (۱ تا ۱۰۰ درصد) و حاشیه فاصله از لبههای تصویر (۰ تا ۲۰۰ پیکسل).
- محافظت در برابر درج تکراری: ایجاد و ذخیره امضای هش MD5 در متای پیوست (
_wso_wm_hash) برای جلوگیری از اعمال مجدد واترمارک روی تصاویری که پیشتر پردازش شدهاند.
۵. نسخه پشتیبان و بازگردانی (Backup & Restore)
- حفظ فایلهای اصلی: ذخیره یک نسخه دستنخورده از فایل اصلی در پوشه اختصاصی (
wp-content/uploads/wso-backups/) قبل از اعمال هرگونه بهینهسازی. - امنیت پوشه بکآپ: محافظت خودکار از مسیر بکآپ با استفاده از فایل
.htaccessقانونگذاریشده (Deny from all) و فایل خالیindex.php. - بازگردانی تکی و کلی: قابلیت بازگردانی تصویر به حالت اولیه از داخل کتابخانه چندرسانهای یا بازگردانی تمام بکآپها از پنل تنظیمات افزونه.
۶. صف بهینهسازی دستهجمعی و اسکنر پوشهها
- سیستم صف اختصاصی: استفاده از جدول پایگاه داده مستقل (
wso_queue) جهت مدیریت وضعیت تصاویر در صف (pending،processing،completed،failed). - پردازش دستهای (Batch Processing): اجرای مراحل بهینهسازی به صورت ناهمگام (Async AJAX) و در دستههای چندتایی جهت جلوگیری از اتمام زمان اجرای PHP (Timeout) یا کمبود حافظه.
- اسکنر پوشهها (Folder Scanner): اسکن پوشههای خارج از کتابخانه رسانه (پوشه Uploads، قالب فعال، افزونهها یا هر مسیر دلخواه درون
ABSPATH) و انتقال تصاویر شناساییشده به صف بهینهسازی.
۷. ادغام با کتابخانه چندرسانهای وردپرس
- ستون اختصاصی وضعیت: افزودن ستون وضعیت بهینهسازی به لیست رسانهها شامل میزان کاهش حجم، حجم اولیه و دکمههای اقدام سریع (بهینهسازی / بازگردانی).
- اطلاعات تفصیلی پیوست: نمایش متادیتای بهینهسازی (
original_size،optimized_size،saved_bytes،driver) در بخش ویرایش پیوست رسانه.
۸. ابزارهای تشخیصی و مدیریتی
- تست سلامت سیستم (Health Check): سیستم عیبیابی ۶گانه برای بررسی تنظیمات سرور، اکستنشنهای PHP، فرمتهای تصویر، دسترسیهای وردپرس، سلامت جداول دیتابیس و درایور فعال.
- گزارشگیری دقیق (Logging): ثبت وضعیت هر عملیات بهینهسازی (
success،warning،error،skipped) در جدولwso_logs. - مرکز اعلانهای داخلی: نمایش پیامها و خطاهای سیستمی از طریق جدول
wso_notifications. - درونریزی و برونبری تنظیمات: برونبری و درونریزی تنظیمات با فرمت JSON و امکان بازنشانی سریع به مقادیر اولیه (Factory Reset).
- مدیریت کش: حذف آسان تمام فایلهای تولیدشده
.webpو.avifیا حذف فایلهای بکآپ با یک کلیک. - تولید متن جایگزین خودکار (Auto Alt): استخراج و ثبت خودکار متن جایگزین بر اساس نام فایل برای تصاویری که فاقد ویژگی
altهستند. - شخصیسازی پنل مدیریت: پشتیبانی از حالت تاریک (Dark Mode) و امکان شخصیسازی رنگها و فونتهای پنل (همراه با فونتهای فارسی وزیر، ایران سنس و ایران یکان).
💻 پیشنیازهای سیستمی
| پیشنیاز | مقدار پشتیبانیشده / توصیهشده | مستندات کد |
|---|---|---|
| نسخه وردپرس | ۵.۵ یا بالاتر | بررسیشده در WSO\Tools\Health_Check |
| نسخه PHP | ۷.۴ یا بالاتر | بررسیشده در WSO\Tools\Health_Check |
| محدودیت حافظه PHP | حداقل ۱۲۸ مگابایت (پیشنهادی: ۲۵۶ مگابایت یا بالاتر) | بررسیشده در WSO\Tools\Health_Check |
| درایورهای تصویر | imagick (پیشنهادی) یا gd |
WSO\Engine\Imagick_Driver / GD_Driver |
| فرمتهای ورودی | JPEG, PNG, WebP, SVG | پشتیبانی در هسته پردازش |
| فرمتهای خروجی | WebP (وابسته به پشتیبانی درایور)، AVIF (نیازمند PHP 8.1+ و پشتیبانی سرور) | بررسی در زمان اجرا |
📥 نصب و راهاندازی
نصب از طریق پیشخوان وردپرس
۱. پوشه افزونه را به صورت یک فایل فشرده با نام behine-chi.zip آماده کنید.
۲. در پیشخوان وردپرس به مسیر افزونهها > افزودن افزونه > بارگذاری افزونه بروید.
۳. فایل behine-chi.zip را انتخاب کرده و دکمه هماکنون نصب کن را کلیک کنید.
۴. پس از نصب، روی فعالسازی افزونه کلیک نمایید.
۵. جداول اختصاصی پایگاه داده (wso_queue ،wso_logs ،wso_notifications) و مقادیر اولیه تنظیمات در زمان فعالسازی به صورت خودکار ایجاد میشوند.
نصب دستی از طریق فایل یا FTP
۱. پوشه behine-chi را در مسیر زیر در هاست یا سرور خود کپی کنید:
wp-content/plugins/behine-chi/
۲. وارد پیشخوان وردپرس شده و به بخش افزونهها > افزونههای نصبشده مراجعه کنید.
۳. افزونه بهینه چی | افزونه حرفهای بهینهسازی تصاویر وردپرس را پیدا کرده و بر روی فعالسازی کلیک کنید.
🛠️ نحوه استفاده
۱. بهینهسازی خودکار هنگام بارگذاری
با فعال بودن گزینه wso_auto_optimize = 1، هر تصویری که در کتابخانه رسانه وردپرس بارگذاری شود، به صورت خودکار از طریق فیلتر wp_handle_upload (با اولویت 20) دریافت شده و فرآیندهای بهینهسازی، تغییر سایز، تبدیل فرمت، واترمارک و ایجاد نسخه پشتیبان روی آن اعمال میشود.
۲. بهینهسازی دستهجمعی (Bulk Optimization)
۱. در منوی مدیریت وردپرس به مسیر بهینه چی > صف بهینهسازی بروید.
۲. روی دکمه ساخت صف کلیک کنید تا کلیه تصاویر بهینهنشده سایت شناسایی و در صف ثبت شوند.
۳. دکمه شروع بهینهسازی را بزنید تا عملیات بهینهسازی از طریق درخواستهای ناهمگام AJAX در دستههای مجزا اجرا شود.
۳. اسکنر پوشهها
۱. به برگه اسکنر پوشهها مراجعه کنید.
۲. مسیر مورد نظر خود را از میان گزینهها (پوشه Uploads، قالب فعال یا افزونهها) انتخاب کنید یا مسیر سفارشی دلخواهی در محدوده ABSPATH وارد نمایید.
۳. دکمه اسکن را بزنید و سپس تصاویر یافتشده را جهت پردازش به صف اضافه کنید.
۴. بهینهسازی تکی از کتابخانه پروندههای چندرسانهای
۱. به مسیر رسانه > کتابخانه (نمای لیستی) بروید.
۲. در ستون وضعیت بهینهسازی اطلاعات مربوط به هر فایل را مشاهده کنید.
۳. برای فشردهسازی مجزا روی بهینهسازی و برای بازگرداندن فایل اصلی روی بازگردانی کلیک کنید.
⚙️ تنظیمات و پیکربندی
کلیه تنظیمات افزونه در جدول wp_options با پیشوند wso_ ذخیره میشوند:
| نام گزینه (Option Key) | نوع کنترل | مقدار پیشفرض | توضیحات عملکردی |
|---|---|---|---|
wso_enable |
چکباکس | 1 |
فعال یا غیرفعالسازی کلی موتور بهینهسازی افزونه. |
wso_quality |
عددی (۱ تا ۱۰۰) | 75 |
درصد کیفیت برای فشردهسازی و تبدیل تصاویر اتلافی. |
wso_delete_original |
چکباکس | 0 |
حذف فایل اصلی پس از تبدیل موفق به فرمتهای WebP/AVIF. |
wso_max_size |
عددی | 2 |
حداکثر حجم فایل به مگابایت؛ تصاویر بزرگتر نادیده گرفته میشوند. |
wso_convert_webp |
چکباکس | 1 |
تبدیل خودکار تصاویر JPEG و PNG به فرمت WebP. |
wso_convert_avif |
چکباکس | 0 |
تبدیل خودکار تصاویر به فرمت AVIF (نیازمند پشتیبانی سرور). |
wso_strip_exif |
چکباکس | 1 |
حذف متادیتا و اطلاعات ثبتشده توسط دوربین از تصویر. |
wso_backup_originals |
چکباکس | 1 |
تهیه نسخه پشتیبان در پوشه wso-backups/ قبل از بهینهسازی. |
wso_optimize_svg |
چکباکس | 1 |
فشردهسازی و پاکسازی ساختار فایلهای SVG هنگام بارگذاری. |
wso_max_width |
عددی | 2560 |
حداکثر عرض مجاز بر حسب پیکسل برای تغییر اندازه خودکار تصاویر. |
wso_max_height |
عددی | 2560 |
حداکثر ارتفاع مجاز بر حسب پیکسل برای تغییر اندازه خودکار تصاویر. |
wso_auto_optimize |
چکباکس | 1 |
اجرای بهینهسازی بلافاصله پس از بارگذاری تصویر در وردپرس. |
wso_dark_mode |
چکباکس | 0 |
فعالسازی تم تیره (Dark Mode) در پنل مدیریت افزونه. |
wso_watermark_enabled |
چکباکس | 0 |
فعالسازی درج نشان/واترمارک بر روی تصاویر پردازششده. |
wso_watermark_image |
شناسه پیوست | 0 |
شناسه (Attachment ID) تصویر واترمارک در کتابخانه رسانه. |
wso_watermark_position |
منوی انتخابی | 'bottom-right' |
محل قرارگیری واترمارک روی تصویر (یکی از ۹ جهت ممکن). |
wso_watermark_opacity |
عددی (۱ تا ۱۰۰) | 70 |
میزان شفافیت تصویر واترمارک بر حسب درصد. |
wso_watermark_margin |
عددی (۰ تا ۲۰۰) | 12 |
فاصله واترمارک از لبههای تصویر به پیکسل. |
wso_auto_alt_enabled |
چکباکس | 0 |
تولید خودکار متن جایگزین بر اساس نام فایل در صورت خالی بودن. |
wso_auto_alt_overwrite |
چکباکس | 0 |
بازنویسی متون جایگزین قبلی در صورت فعال بودن. |
🗄️ ساختار پایگاه داده
هنگام فعالسازی، افزونه سه جدول اختصاصی از طریق تابع dbDelta در پایگاه داده ایجاد میکند:
۱. {wp_prefix}_wso_queue
مدیریت صف پردازش دستهجمعی:
id: کلید اصلی (شناسه افزایشی).attachment_id: شناسه پیوست در وردپرس.file_path: مسیر کامل و مطلق فایل روی سرور.status: وضعیت کار (pending،processing،completed،failed).attempts: شمارنده دفعات تلاش مجدد.error_message: پیام خطا در صورت ناموفق بودن پردازش.created_atوupdated_at: زمان ثبت و بهروزرسانی رکورد.
۲. {wp_prefix}_wso_logs
ثبت گزارشهای عملکرد بهینهسازی:
id: کلید اصلی.attachment_id: شناسه پیوست مرتبط.filename: نام فایل تصویر.driver: موتور استفادهشده (imagickیاgd).original_size: حجم فایل به بایت قبل از بهینهسازی.optimized_size: حجم فایل به بایت پس از بهینهسازی.status: وضعیت نهایی (success،warning،error،skipped).message: توضیحات تکمیلی یا متن خطای احتمالی.created_at: زمان ثبت گزارش.
۳. {wp_prefix}_wso_notifications
مرکز پیامها و هشدارهای داخلی افزونه:
id: کلید اصلی.type: نوع پیام (info،success،warning،error).title: عنوان مختصر اعلان.message: متن اعلان.is_read: وضعیت مشاهده پیام (0یا1).created_at: زمان ایجاد پیام.
متادیتای پیوستها (Post Meta)
_wso_optimized: پرچم بهینهسازی (مقدار1نشاندهنده بهینهسازی تصویر است)._wso_opt_data: آرایه سریالی شامل مشخصات بهینهسازی (original_size،optimized_size،saved_bytes،driver،timestamp)._wso_wm_hash: امضای هش MD5 تنظیمات واترمارک اعمالشده به منظور جلوگیری از اعمال مضاعف.
🔌 اندپوینتهای AJAX
کلیه درخواستهای AJAX نیازمند دسترسی سطح مدیریت (manage_options) بوده و اعتبارسنجی نانس امنیتی آنها توسط wso_admin_nonce و تابع check_ajax_referer انجام میشود:
| نام Action | تابع متصل (Callback) | شرح عملیات |
|---|---|---|
wso_save_settings |
AJAX_Handler::save_settings |
پاکسازی و ذخیرهسازی تنظیمات افزونه. |
wso_get_logs |
AJAX_Handler::get_logs |
دریافت گزارشهای لاگ ثبتشده در wso_logs. |
wso_clear_logs |
AJAX_Handler::clear_logs |
پاکسازی کامل جدول wso_logs. |
wso_get_stats |
AJAX_Handler::get_stats |
محاسبه مجموع حجم صرفهجوییشده و آمار تفکیکی فرمتها. |
wso_get_notifications |
AJAX_Handler::get_notifications |
دریافت پیامهای ثبتشده در wso_notifications. |
wso_mark_notification_read |
AJAX_Handler::mark_notification_read |
علامتگذاری یک اعلان به عنوان خواندهشده. |
wso_mark_all_notifications_read |
AJAX_Handler::mark_all_notifications_read |
خواندهشده کردن تمامی اعلانها. |
wso_clear_notifications |
AJAX_Handler::clear_notifications |
حذف کلیه رکوردهای جدول اعلانها. |
wso_run_health_check |
AJAX_Handler::run_health_check |
اجرای تست عیبیابی ۶گانه سیستم. |
wso_run_health_fix |
AJAX_Handler::run_health_fix |
تلاش خودکار برای رفع ایرادات احتمالی جداول یا دسترسیها. |
wso_build_queue |
Async_Processor::ajax_build_queue |
شناسایی تصاویر پردازشنشده و افزودن به جدول wso_queue. |
wso_process_batch |
Async_Processor::ajax_process_batch |
پردازش یک دسته از تصاویر صفبندیشده. |
wso_get_queue_status |
Async_Processor::ajax_get_queue_status |
استعلام وضعیت فعلی و درصد پیشرفت صف. |
wso_reset_queue |
Async_Processor::ajax_reset_queue |
حذف تمامی رکوردهای صف wso_queue. |
wso_scan_folder |
Folder_Scanner::ajax_scan_folder |
بررسی و اسکن فایلهای تصویری موجود در یک مسیر مشخص. |
wso_queue_scanned_folder |
Folder_Scanner::ajax_queue_scanned_folder |
افزودن فایلهای اسکنشده به جدول صف بهینهسازی. |
wso_single_optimize |
Media_Library::ajax_single_optimize |
بهینهسازی مجزای یک تصویر از کتابخانه رسانه. |
wso_single_restore |
Media_Library::ajax_single_restore |
بازگرداندن فایل اصلی یک تصویر از نسخه پشتیبان. |
wso_restore_all_backups |
Cache_Manager::ajax_restore_all_backups |
بازگردانی کلیه فایلهای پشتیبان به مسیرهای اصلی خود. |
wso_clear_backups |
Cache_Manager::ajax_clear_backups |
حذف کامل کلیه فایلهای پوشه wso-backups/. |
wso_clear_generated_cache |
Cache_Manager::ajax_clear_generated_cache |
حذف فایلهای تولیدشده جانبی با فرمتهای .webp و .avif. |
wso_export_settings |
Exporter_Importer::ajax_export_settings |
دریافت خروجی از کلیه تنظیمات جاری در قالب JSON. |
wso_import_settings |
Exporter_Importer::ajax_import_settings |
بارگذاری و اعمال تنظیمات از روی فایل JSON. |
wso_reset_settings |
Exporter_Importer::ajax_reset_settings |
بازنشانی کلیه گزینههای wso_* به مقادیر پیشفرض. |
wso_fill_missing_alts |
Auto_Alt::ajax_fill_missing_alts |
اسکن تصاویر و تنظیم متن جایگزین برای موارد خالی. |
🔍 عیبیابی و تست سلامت سیستم
افزونه شامل یک سیستم داخلی بررسی سلامت (WSO\Tools\Health_Check) است که وضعیتهای زیر را تحلیل میکند:
۱. محیط سرور: نسخه PHP (حداقل ۷.۴)، حافظه تخصیصدادهشده (حداقل ۱۲۸ مگابایت) و زمان مجاز اجرای اسکریپتها.
۲. اکستنشنهای PHP: بررسی نصب بودن اکستنشنهای imagick یا gd.
۳. پشتیبانی فرمتها: بررسی قابلیت ایجاد فرمت WebP در درایور فعال و پشتیبانی از AVIF.
۴. دسترسیهای وردپرس: بررسی نگارش وردپرس (حداقل ۵.۵) و قابلیت نوشتن در مسیرهای wp-content/uploads/ و wp-content/uploads/wso-backups/.
۵. صحت پایگاه داده: تأیید وجود و ساختار مناسب جداول wso_queue ،wso_logs و wso_notifications.
۶. درایور فعال: شناسایی موتوری که عملیات تبدیل را به صورت فعال پردازش میکند.
موارد و خطاهای متداول:
- عدم تبدیل به AVIF: تبدیل به AVIF نیازمند PHP 8.1 به همراه ماژول کامپایلشده
libavifدر GD یا Imagick است. در صورت عدم وجود این قابلیت روی هاست، گزینهwso_convert_avifرا غیرفعال کرده و از WebP استفاده نمایید. - اشغال فضای ذخیرهسازی توسط بکآپها: با استفاده از دکمه پاکسازی پشتیبانها در پنل مدیریت، میتوانید فضای مصرفی را آزاد کنید یا گزینه
wso_backup_originalsرا غیرفعال نمایید. - پردازش نشدن فایلهای بزرگ: گزینه
wso_max_size(پیشفرض: ۲ مگابایت) را در تنظیمات بررسی کنید. فایلهای بزرگتر از این اندازه جهت ممانعت از کرش حافظه پردازش نمیشوند.
📄 مجوز
این پروژه تحت مجوز GPLv2 or later (مجوز عمومی گنو نسخه ۲ یا نسخههای بعدی) منتشر شده است.
👤 توسعهدهنده
- توسعهدهنده: Ehsan.dev
- وبسایت: http://sir-developer.ir/