Skip to content

Releases: ishadmehri/dadsoo-ajax-comment

v4.0.0 — agax typo corrected to ajax

Choose a tag to compare

@ishadmehri ishadmehri released this 21 Sep 06:20

این افزونه از همان اولین کامیت (Elin Agax Comment) به‌جای «ajax» از «agax» استفاده می‌کرد — یک غلط تایپی که در بازنویسی‌های بعدی (تغییر نام به Dadsoo، فارسی‌سازی معکوس، آماده‌سازی برای مخزن وردپرس) هم دست‌نخورده ماند. پیش از ارسال به مخزن وردپرس — که بعد از انتشار، اسلاگ آن عملاً برای همیشه ثابت می‌ماند — این نسخه غلط را در همه‌جا اصلاح می‌کند.

⚠️ پیش از به‌روزرسانی بخوانید

نام پوشهٔ افزونه هم تغییر کرده (dadsoo-agax-comment → dadsoo-ajax-comment)، نه فقط فایل داخلی — این فراتر از تغییرات نسخه‌های قبلی است. برای به‌روزرسانی یک نصب موجود:

  1. افزونهٔ قدیمی را از پیشخوان غیرفعال کنید (لازم نیست حذف کنید؛ دادهٔ آن در دیتابیس می‌ماند).
  2. پوشهٔ جدید (dadsoo-ajax-comment) را در wp-content/plugins/ قرار دهید.
  3. افزونهٔ جدید را فعال کنید — مهاجرت دادهٔ زیر همان لحظه خودکار اجرا می‌شود.
  4. پوشهٔ قدیمی را می‌توانید حذف کنید.

چه چیزی تغییر کرده

نام پوشه و فایل اصلی، نام کلاس (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

Choose a tag to compare

@ishadmehri ishadmehri released this 20 Sep 20:07

این انتشار افزونه را برای ثبت در مخزن وردپرس (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، رأی‌گیری سمت سرور و بازنویسی بارگذاری بیشتر

Choose a tag to compare

@ishadmehri ishadmehri released this 05 Sep 18:11

این انتشار شامل تغییرات ۳٫۰٫۰ (که جداگانه منتشر نشد) و ۳٫۱٫۰ است.

⚠️ پیش از به‌روزرسانی بخوانید

نام فایل اصلی افزونه از 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 دانلود و از مسیر «افزونه‌ها ← افزودن ← بارگذاری افزونه» نصب کنید.