WP Manifestindependent plugin directory
manifest / media / behine-chi

بهینه چی | افزونه حرفه‌ای بهینه‌سازی تصاویر وردپرس

WordPress image optimization plugin

by Ehsan.dev · github.com/ehsandev2008/behine-chi · website

2stars
0forks

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 خارجی انجام می‌دهد.


📋 فهرست مطالب


🚀 قابلیت‌ها و ویژگی‌ها

۱. تبدیل و فشرده‌سازی تصاویر

  • تولید فرمت‌های نسل جدید: تبدیل خودکار فرمت‌های JPEG ،PNG و WebP به دو فرمت بهینه WebP و AVIF.
  • موتور پردازش دوگانه (Dual Engine):
    • Imagick: درایور اصلی برای پردازش و تبدیل با کیفیت بالا در صورت فعال بودن اکستنشن imagick در PHP.
    • GD Library: درایور جایگزین (Fallback) مستقل در صورت در دسترس نبودن 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 (مجوز عمومی گنو نسخه ۲ یا نسخه‌های بعدی) منتشر شده است.


👤 توسعه‌دهنده