Repository navigation
Releases: ishadmehri/dadsoo-ajax-comment
Release list
v4.0.0 — agax typo corrected to ajax
این افزونه از همان اولین کامیت (Elin Agax Comment) بهجای «ajax» از «agax» استفاده میکرد — یک غلط تایپی که در بازنویسیهای بعدی (تغییر نام به Dadsoo، فارسیسازی معکوس، آمادهسازی برای مخزن وردپرس) هم دستنخورده ماند. پیش از ارسال به مخزن وردپرس — که بعد از انتشار، اسلاگ آن عملاً برای همیشه ثابت میماند — این نسخه غلط را در همهجا اصلاح میکند.
⚠️ پیش از بهروزرسانی بخوانید
نام پوشهٔ افزونه هم تغییر کرده (dadsoo-agax-comment → dadsoo-ajax-comment)، نه فقط فایل داخلی — این فراتر از تغییرات نسخههای قبلی است. برای بهروزرسانی یک نصب موجود:
- افزونهٔ قدیمی را از پیشخوان غیرفعال کنید (لازم نیست حذف کنید؛ دادهٔ آن در دیتابیس میماند).
- پوشهٔ جدید (
dadsoo-ajax-comment) را درwp-content/plugins/قرار دهید. - افزونهٔ جدید را فعال کنید — مهاجرت دادهٔ زیر همان لحظه خودکار اجرا میشود.
- پوشهٔ قدیمی را میتوانید حذف کنید.
چه چیزی تغییر کرده
نام پوشه و فایل اصلی، نام کلاس (Dadsoo_Agax_Comment → Dadsoo_Ajax_Comment)، اکشنهای AJAX، nonce، کلیدهای متا، کوکیها، شورتکدها، نام ویجتهای Elementor، دامنهٔ ترجمه، نام فایلهای زبان، و شیء سراسری جاوااسکریپت (dadsooAgaxComment → dadsooAjaxComment).
چیزی از دست نمیرود
- شمارش لایک/دیسلایک و رأی هر بازدیدکننده در لحظهٔ فعالسازی خودکار منتقل میشود. چون پیشوند رأی شامل شناسهٔ رأیدهنده در انتهای خودش است، این مهاجرت با یک
REPLACE()روی پیشوند انجام میشود، نه تطبیق دقیق کلید — پیش از قرار گرفتن در این انتشار، مستقیماً با دادههای آزمایشی تأیید شد. - شورتکدهای
[dadsoo-agax-comments]قدیمی (و[elin-agax-comments]قدیمیتر) و ویجتهای Elementor با همان نامها، مثل مهاجرتهای قبلی، هنوز کار میکنند. dadsoo_agax_comment()وelinweb_agax_comment()هر دو بهعنوان alias منسوخ باقی ماندهاند.
آمادگی برای مخزن وردپرس
پس از این تغییر، افزونهٔ رسمی Plugin Check دوباره اجرا شد. دو یافتهٔ واقعی رفع شد (عدم تطابق دامنهٔ ترجمه با اسلاگ پوشه، و دو کلاس ویجت میراثی بدون پیشوند)؛ همان دو هشدار کماهمیت و عمدی از نسخهٔ قبل باقی ماندهاند (در README.md توضیح داده شدهاند).
تست یکپارچگی هم بهروزرسانی و دوباره اجرا شد: هر ۵۵ چک سبز.
نصب
فایل dadsoo-ajax-comment-4.0.0.zip را از بخش Assets دانلود و از مسیر «افزونهها ← افزودن ← بارگذاری افزونه» نصب کنید.
v3.2.0 — English source strings, bundled Persian translation, WordPress.org readiness
این انتشار افزونه را برای ثبت در مخزن وردپرس (wordpress.org) آماده میکند.
زبان و ترجمه
- رشتههای مبدأ افزونه از فارسی به انگلیسی تغییر کرد. مخزن وردپرس انتظار دارد رشتهٔ مبدأ (msgid) در
__()/_e()انگلیسی باشد و بقیهٔ زبانها بهصورت ترجمه ارائه شوند. - ترجمهٔ کامل فارسی بسته شد (
languages/dadsoo-agax-comment-fa_IR.poو.mo) — همان متنهای دقیق نسخههای قبل. روی سایتهایی با locale فارسی (fa_IR)، از جمله dadsoo.com، افزونه دقیقاً همان چیزی را نشان میدهد که قبلاً نشان میداد؛ این مورد روی یک نصب واقعی وردپرس با locale فارسی تأیید شد. - فایل
languages/dadsoo-agax-comment.potبرای ساخت ترجمه به زبانهای دیگر اضافه شد.
آمادگی برای مخزن وردپرس
- فایل
readme.txtبه فرمت استاندارد مخزن وردپرس (انگلیسی) اضافه شد.README.mdقبلی برای توسعهدهندهها باقی میماند، ولی مخزن وردپرس آن را نمیخواند. - فیلدهای
License: GPL v2 or laterوLicense URIبه سرتیتر افزونه اضافه شد؛ بدون این فیلدها افزونه در بررسی مخزن رد میشود.
نتیجهٔ افزونهٔ رسمی Plugin Check
افزونهٔ Plugin Check خودِ تیم وردپرس روی نسخهٔ نهایی اجرا و همهٔ یافتههای واقعی رفع شد:
- ناسازگاری نسخه:
wp_cache_flush_group()/wp_cache_supports()از وردپرس ۶.۱ اضافه شدهاند در حالی که «Requires at least» افزونه ۵.۸ است. حالا خودِwp_cache_flush_groupهم مستقیم باfunction_exists()بررسی میشود. - بررسی نانسِ فرم ثبت نظر از تابع اختصاصی به
check_ajax_referer()هستهٔ وردپرس تغییر کرد. - یک
echoچندخطی در ویجت فهرست نظرات که کامنتphpcs:ignoreانتهایش را نادیده میگرفت، بهechoتکخطی تغییر کرد. - چند کامنت
phpcs:ignoreمستند برای مواردی که ابزار بررسی، توابع ضدعفونیکنندهٔ اختصاصی افزونه (مثلsanitize_vote_icons()) یا بررسی نانس در تابع فراخوان را تشخیص نمیدهد.
دو هشدار کماهمیت با آگاهی باقی ماندهاند (در README.md توضیح داده شدهاند): فایل .gitignore که اصلاً داخل بستهٔ نهایی نیست، و فراخوانی عمدی load_plugin_textdomain() برای اینکه ترجمه در نصب مستقیم از GitHub هم کار کند نه فقط روی مخزن وردپرس.
نصب
فایل dadsoo-agax-comment-3.2.0.zip را از بخش Assets دانلود و از مسیر «افزونهها ← افزودن ← بارگذاری افزونه» نصب کنید.
Contributors در readme.txt را با نام کاربری واقعی حساب wordpress.org جایگزین کنید.
v3.1.0 — تغییر پیشوند به dadsoo، رأیگیری سمت سرور و بازنویسی بارگذاری بیشتر
این انتشار شامل تغییرات ۳٫۰٫۰ (که جداگانه منتشر نشد) و ۳٫۱٫۰ است.
⚠️ پیش از بهروزرسانی بخوانید
نام فایل اصلی افزونه از elin-agax-comment.php به dadsoo-agax-comment.php تغییر کرده است، بنابراین وردپرس افزونه را غیرفعال میکند. پس از بهروزرسانی یکبار آن را از بخش «افزونهها» فعال کنید.
بقیهٔ موارد بهصورت خودکار مهاجرت میکنند:
| مورد | وضعیت |
|---|---|
متای elinweb_agax_likes و elinweb_agax_dislikes |
در اولین بارگذاری خودکار به پیشوند dadsoo_ منتقل میشود |
رأیهایی که فقط در کوکی elinweb_agax_vote_* بودند |
یکبار خوانده و به رکورد سمت سرور تبدیل میشوند |
شورتکدهای [elin-agax-comment-form] و [elin-agax-comments] |
هنوز کار میکنند (منسوخ) |
ویجتهای Elementor با نام elinweb-agax-* |
هنوز رندر میشوند، ولی در پنل ویجتها دیده نمیشوند |
تابع elinweb_agax_comment() |
به dadsoo_agax_comment() نگاشت شده |
اگر جاوااسکریپت یا CSS افزونه را سفارشی کردهاید، اینها ناسازگارند: شیء سراسری elinwebAgaxComment حالا dadsooAgaxComment است، کلاسهای آیکون از elinweb-* به dadsoo-* تغییر کردهاند، و پاسخ AJAX «بارگذاری نظرات» کلید has_more هم برمیگرداند.
🔒 امنیت
- رأیها فقط با کوکی کنترل میشدند — پاککردن کوکی یا حالت ناشناس، رأی نامحدود میداد. حالا هر رأی با شناسهٔ پایدار رأیدهنده در متای دیدگاه ثبت میشود: شناسهٔ کاربر برای کاربر واردشده، و HMAC از IP و مرورگر با نمک سایت برای مهمان. کوکی فقط نمای مرورگر را همگام نگه میدارد.
- بدون هیچ لایهٔ ضد اسپم — ثبت دیدگاه از
wp_insert_comment()بهwp_new_comment()منتقل شد، پس آکیسمت، کنترل سیل درخواست، فهرست کلمات ممنوع، قوانین بازبینی و ایمیلهای اطلاعرسانی هستهٔ وردپرس اجرا میشوند. «تأییدشده» بودن دیگر از دسترسی کاربر حدس زده نمیشود، بلکه از وضعیت واقعی دیدگاه ثبتشده خوانده میشود. - تلهٔ ربات (honeypot) در فرم دیدگاه و فرم پاسخ.
wp_verify_nonce()روی ورودی بدونwp_unslashاجرا میشد؛ متن دیدگاه و پاسخ با دو فهرست تگ متفاوت فیلتر میشدند؛ شناسه و عمق دیدگاه بدونesc_attr()چاپ میشدند؛ آدرس آیکون SVG از سمت مرورگر بدون بررسی دامنه پذیرفته میشد.
⚡ عملکرد
- حذف N+1 کوئری — رندر هر دیدگاه یک
get_comments()جدا برای پاسخهایش میزد. حالا کل درخت با یک کوئری بهازای هر سطح عمق گرفته میشود و متای همه با یکupdate_meta_cache()پر میشود: ۶ کوئری برای ۹ دیدگاه در ۴ سطح (در تست یکپارچگی شمارش میشود). - CSS و JS روی همهٔ صفحات سایت بارگذاری میشدند؛ حالا فقط جایی صف میشوند که شورتکد یا ویجت واقعاً رندر شود.
🐛 «بارگذاری بیشتر»
- دکمه وقتی تعداد کل مضربی از اندازهٔ صفحه بود هرگز پنهان نمیشد و هر کلیک بعدی همان offset را دوباره درخواست میکرد و چیزی برنمیگرداند — که بهشکل «کلیک میکنم هیچ اتفاقی نمیافتد» دیده میشد. سرور حالا
has_moreبرمیگرداند و offset با تعداد واقعیِ برگشتی جلو میرود. - درج نظر تازه در بالای فهرست، offset را جابهجا نمیکرد و «بارگذاری بیشتر» آخرین نظر قبلی را تکراری میآورد.
- کلیک سریع پشتسرهم، نظرات تکراری اضافه میکرد.
✨ تازهها
- نشانگر بارگذاری — چرخانهٔ CSS (بدون تصویر) هنگام بارگذاری اولیهٔ فهرست، روی دکمهٔ «بارگذاری بیشتر»، و روی دکمههای ارسال نظر و پاسخ.
- حالت «هنوز نظری ثبت نشده است» — پیشتر نوشتهٔ بدون دیدگاه کاملاً خالی میماند.
- اسکرول و فلَش روی دستهٔ تازه — پس از هر «بارگذاری بیشتر»، صفحه روی اولین نظرِ دستهٔ جدید اسکرول میشود و حدود دو ثانیه دور آن فلَش میزند. بارگذاری اول اسکرول نمیکند. اسکرول نرم در بعضی مرورگرها و وبویوها بیصدا نادیده گرفته میشود، پس اگر حرکتی رخ ندهد بدون انیمیشن انجام میگیرد.
- متنهای قابل تنظیم —
load_more_text،loading_textوempty_textهم در ویجت Elementor و هم در شورتکد. کنترلِ خالی به مقدار پیشفرض برمیگردد. - بخش استایل «بارگذاری بیشتر» در Elementor — تایپوگرافی، رنگ متن و پسزمینه (عادی و هاور)، کادر، فاصلهٔ داخلی و گردی گوشهها، رنگ پیام بارگذاری/خالی، رنگ فلَش، و فاصله از بالا هنگام اسکرول برای جبران هدر چسبان قالب.
- احترام به
prefers-reduced-motion.
🔧 سایر رفعها
دو ویجت فرم روی یک صفحه id تکراری میساختند؛ فرم پاسخ با id سراسری پیدا میشد؛ آواتار با ایمیل درخواست میشد نه با آبجکت دیدگاه (آواتارهای سفارشی نادیده گرفته میشدند)؛ پینگبک و ترکبک بهعنوان دیدگاه رندر میشدند؛ حلقهٔ «حدسزدن فیلد نظر» میتوانست فیلد اشتباهی را بهعنوان متن دیدگاه بردارد. همهٔ متنها حالا از __() عبور میکنند و load_plugin_textdomain() صدا زده میشود.
نصب
فایل dadsoo-agax-comment-3.1.0.zip را از بخش Assets دانلود و از مسیر «افزونهها ← افزودن ← بارگذاری افزونه» نصب کنید.