Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/ishadmehri/dadsoo-ajax-comment/archive/refs/heads/main.zip
Dadsoo Ajax Comment
English | فارسی
افزونهٔ سبک وردپرس برای نمایش و مدیریت فرم و فهرست دیدگاههای سفارشی با رابط کاربری AJAX.
قابلیتها
✅ ارسال دیدگاه بدون بارگذاری مجدد صفحه
✅ نمایش تدریجی دیدگاههای تأییدشده
✅ پاسخ تو در تو تا سه سطح
✅ انتشار فوری دیدگاه و پاسخ کاربرانی که دسترسی moderate_comments دارند
✅ لایک و دیسلایک با امکان تغییر یا لغو رأی، با ثبت سمت سرور (پاککردن کوکی رأی را تکرارپذیر نمیکند)
✅ استفاده از آواتار وردپرس و نمایش تاریخ دیدگاه
✅ بارگذاری CSS و JS فقط در صفحاتی که شورتکد یا ویجت دارند
✅ نشانگر بارگذاری، حالت «نظری نیست»، و اسکرول و فلَش روی اولین نظرِ دستهٔ تازه
✅ متن دکمهٔ بارگذاری بیشتر و پیامهای بارگذاری و خالی، قابل تنظیم
✅ ثبت IP و شناسهٔ مرورگر برای مدیریت و بررسی هرزنامه
✅ بررسی nonce در درخواستهای AJAX، تلهٔ ربات در فرمها و عبور دیدگاهها از آکیسمت و قوانین بازبینی وردپرس
✅ دو ویجت مستقل Elementor برای فرم نظر و فهرست نظرات
✅ تنظیم تعداد نظرات در بارگذاری اولیه از داخل ویجت فهرست
✅ کنترل استایل تصویر و نام نویسنده، متن نظر، آیکونها و حالتهای لایک/دیسلایک در Elementor
نیازمندیها
- WordPress 5.8 یا جدیدتر
- PHP 7.4 یا جدیدتر
- jQuery (همراه هستهٔ وردپرس)
- Elementor (فقط برای استفاده از ویجتها؛ شورتکدها به آن نیاز ندارند)
نصب
-
پوشهٔ افزونه را در
wp-content/plugins/dadsoo-ajax-commentقرار دهید. -
افزونه را از بخش «افزونهها» در پیشخوان وردپرس فعال کنید.
-
در برگه یا قالب موردنظر از شورتکدهای زیر استفاده کنید:
[dadsoo-ajax-comment-form] [dadsoo-ajax-comments] [dadsoo-ajax-comments items="10"] [dadsoo-ajax-comments items="10" avatar_size="72"] [dadsoo-ajax-comments load_more_text="نظرات بیشتر" loading_text="کمی صبر کنید" empty_text="اولین نظر را شما بنویسید"]
دیدگاهها و پاسخهای کاربران مهمان با وضعیت «در انتظار تأیید» ثبت میشوند و از بخش دیدگاههای وردپرس قابل مدیریت هستند. کاربرانی که دسترسی moderate_comments دارند (مدیر و ویراستار) دیدگاهشان بلافاصله منتشر و بدون بارگذاری دوبارهٔ صفحه در فهرست نمایش داده میشود.
ویجتهای Elementor
پس از نصب Elementor، در دستهٔ General دو ویجت با نامهای زیر در دسترساند:
Dadsoo Ajax Comment Formبرای فرم ارسال نظرDadsoo Ajax Commentsبرای فهرست نظرات
کنترلهای ویجت فهرست:
| بخش | کنترل |
|---|---|
| تنظیمات فهرست | تعداد نظرات در بارگذاری اولیه (۱ تا ۱۰۰)، متن دکمهٔ بارگذاری بیشتر، متن حالت بارگذاری، متن حالت خالی |
| آیکونهای رأی | آیکون لایک و دیسلایک، هرکدام برای حالت غیرفعال (Outline) و فعال (Fill) |
| نویسنده | اندازه و گردی تصویر نویسنده، رنگ و تایپوگرافی نام نویسنده |
| متن نظر | رنگ و تایپوگرافی متن دیدگاه |
| بارگذاری بیشتر | تایپوگرافی، رنگ متن و پسزمینه (عادی و هاور)، کادر، فاصلهٔ داخلی، گردی گوشهها، رنگ پیام بارگذاری/خالی، رنگ فلَش و فاصله از بالا هنگام اسکرول |
| دکمهٔ لایک / دکمهٔ دیسلایک | فاصلهٔ داخلی، گردی گوشهها، و به تفکیک حالت فعال و غیرفعال: رنگ آیکون، رنگ پسزمینه و کادر |
آیکونها با Elementor\Icons_Manager::render_icon() رندر میشوند، بنابراین آیکونهای کتابخانهٔ Elementor و SVG آپلودی هر دو پشتیبانی میشوند. چون فهرست دیدگاهها با AJAX میآید، Font Awesome پیش از آن درخواست با Icons_Manager::enqueue_shim() بارگذاری میشود. اگر Elementor خروجی قدیمی نشان داد، از Elementor → Tools گزینهٔ Regenerate Files & Data را اجرا کنید.
بارگذاری بیشتر
فهرست با AJAX و بهصورت صفحهبهصفحه میآید. تا زمانی که دسته برسد، چرخانه نمایش داده میشود؛ سرور در هر پاسخ میگوید صفحهٔ بعدی وجود دارد یا نه، پس دکمه در آخرین صفحه پنهان میشود حتی اگر تعداد کل دقیقاً مضربی از اندازهٔ صفحه باشد.
پس از هر بار «بارگذاری بیشتر»، صفحه روی اولین نظرِ دستهٔ تازه اسکرول میشود و برای حدود دو ثانیه دور آن فلَش میزند. اگر قالب شما هدر چسبان دارد و بالای نظر زیر آن میرود، مقدار «فاصله از بالا هنگام اسکرول» را در ویجت تنظیم کنید یا در CSS خودتان --dadsoo-scroll-offset را تغییر دهید:
.dadsoo-comments-container { --dadsoo-scroll-offset: 140px; --dadsoo-flash-color: #e91e63; }
عمق پاسخها
پاسخها تا سه سطح تو در تو نمایش داده میشوند. در سطح سوم دکمهٔ «پاسخ به نظر» نمایش داده نمیشود و درخواست پاسخ عمیقتر از سمت سرور رد میشود، تا هیچ دیدگاه تأییدشدهای ثبت نشود که بعداً قابل نمایش نباشد.
تست
تست یکپارچگی با WP-CLI اجرا میشود و پست آزمایشی خودش را در پایان پاک میکند:
wp eval-file tests/integration-smoke.php --path=<wordpress-path>
خروجی JSON است؛ کلید failed_checks باید آرایهٔ خالی باشد.
ارتقا از نسخههای Elin (پیش از ۳٫۰)
نسخهٔ ۳٫۰ همهٔ شناسههای elinweb/elin را به dadsoo تغییر داده است. برای اینکه سایتهای موجود از کار نیفتند:
| مورد | وضعیت |
|---|---|
متای 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() نگاشت شده است |
چون نام فایل اصلی افزونه از elin-agax-comment.php به dadsoo-agax-comment.php تغییر کرده، وردپرس افزونه را غیرفعال میکند؛ پس از بهروزرسانی یکبار آن را از بخش «افزونهها» فعال کنید.
اگر جاوااسکریپت افزونه را سفارشی کردهاید، شیء سراسری elinwebAgaxComment حالا dadsooAjaxComment نام دارد (در نسخهٔ ۳٫x بهاشتباه dadsooAgaxComment بود؛ به بخش زیر نگاه کنید) و کلاسهای CSS آیکون از elinweb-* به dadsoo-* تغییر کردهاند.
رفع غلط تایپی agax → ajax (نسخهٔ ۴٫۰)
نسخههای ۳٫x بهاشتباه از «agax» بهجای «ajax» در همهٔ شناسهها استفاده میکردند (میراث نام قدیمیتر افزونه). نسخهٔ ۴٫۰ این را در همهجا اصلاح کرده: نام پوشه و فایل اصلی، نام کلاس، اکشنهای AJAX، nonce، کلیدهای متا، کوکیها، شورتکدها، نام ویجتهای Elementor، دامنهٔ ترجمه و شیء سراسری جاوااسکریپت. برای اینکه سایتهای موجود از کار نیفتند:
| مورد | وضعیت |
|---|---|
متای dadsoo_agax_likes/dislikes و پیشوند رأی dadsoo_agax_vote_* |
هنگام اولین بارگذاری افزونه بهصورت خودکار به dadsoo_ajax_* منتقل میشوند |
رأیهایی که فقط در کوکی dadsoo_agax_vote_* بودند |
مثل نسخههای قبل، یکبار خوانده میشوند |
شورتکدهای [dadsoo-agax-comment-form] و [dadsoo-agax-comments] |
هنوز کار میکنند (منسوخ) |
ویجتهای Elementor با نام dadsoo-agax-* |
هنوز رندر میشوند ولی در پنل ویجتها نمایش داده نمیشوند |
تابع dadsoo_agax_comment() |
به dadsoo_ajax_comment() نگاشت شده است |
نام پوشهٔ افزونه هم از dadsoo-agax-comment به dadsoo-ajax-comment تغییر کرده — این فراتر از تغییر نام فایل داخلی است. برای بهروزرسانی یک نصب موجود:
- افزونهٔ قدیمی را از پیشخوان غیرفعال کنید (لازم نیست حذف کنید؛ متا و کوکیها در دیتابیس میمانند).
- پوشهٔ جدید (
dadsoo-ajax-comment) را درwp-content/plugins/قرار دهید. - افزونهٔ جدید را فعال کنید. مهاجرت دادهٔ بالا خودکار در همان لحظهٔ فعالسازی اجرا میشود.
- پوشهٔ قدیمی (
dadsoo-agax-comment) را میتوانید حذف کنید.
توسعه
فایل اصلی افزونه dadsoo-ajax-comment.php است. استایلها و رفتار سمت مرورگر بهترتیب در assets/css/style.css و assets/js/script.js قرار دارند. توسعه و نگهداری پروژه توسط Elinweb انجام میشود.
زبان و ترجمه
از نسخهٔ ۳٫۲٫۰، رشتههای مبدأ افزونه (داخل __()/_e()) انگلیسیاند. از نسخهٔ ۴٫۰٫۱، افزونه دیگر هیچ فایل .po/.mo را همراه خودش نمیفرستد و load_plugin_textdomain() هم صدا زده نمیشود — طبق بازخورد تیم بررسی مخزن وردپرس، افزونههای میزبانیشده باید ترجمه را کاملاً به translate.wordpress.org بسپارند تا وردپرس خودش بهمحض نیاز بارگذاریشان کند.
ترجمهٔ فارسیِ ساختهشده در translations/dadsoo-ajax-comment-fa_IR.po و .mo نگه داشته میشود (بخشی از بستهٔ افزونه نیست، فقط مرجع/برای ثبت در GlotPress). فایل languages/dadsoo-ajax-comment.pot هم بهعنوان الگو در خودِ افزونه باقی میماند.
برای اینکه سایتی مثل dadsoo.com تا قبل از تأیید شدن ترجمهٔ رسمی همچنان فارسی ببیند، کافی است فایل .mo را مستقیم در پوشهٔ مرکزی زبانهای وردپرس (نه داخل پوشهٔ خودِ افزونه) بگذارید — این همان مسیری است که خودِ وردپرس و مخزن ترجمه هم از آن استفاده میکنند:
wp-content/languages/plugins/dadsoo-ajax-comment-fa_IR.mo
برای بهروزرسانی ترجمهٔ فارسی پس از تغییر متنها:
wp i18n make-pot . languages/dadsoo-ajax-comment.pot --domain=dadsoo-ajax-comment --exclude=tests,languages,translations
wp i18n make-mo translations/dadsoo-ajax-comment-fa_IR.po translations/
انتشار در مخزن وردپرس
فایل readme.txt (فرمت استاندارد مخزن وردپرس، به انگلیسی) در ریشهٔ افزونه آماده است. پیش از ارسال:
- مقدار
Contributorsدرreadme.txtبا نام کاربری واقعی حساب wordpress.org (imansh) تنظیم شده است. - افزونهٔ رسمی Plugin Check را روی نسخهٔ نهایی اجرا کنید؛ در زمان نگارش این سند، تنها دو هشدار کماهمیت باقی ماندهاند (فایل
.gitignoreکه در بستهٔ نهایی نیست، و فراخوانی عمدیload_plugin_textdomain()برای پشتیبانی از نصب خارج از مخزن وردپرس). - زیپ نهایی را بدون
tests/،.git،.gitignore،README.en.md(Plugin Check فقطREADME.md/readme.txt/LICENSE(.md)/CHANGELOG.md/CONTRIBUTING.md/SECURITY.mdرا در ریشه میپذیرد) و سایر فایلهای پنهان از https://wordpress.org/plugins/developers/add/ ارسال کنید.README.en.mdفقط در مخزن گیتهاب میماند.
بنر و آیکون صفحهٔ افزونه
فایلهای نمایشی صفحهٔ افزونه (نه بخشی از کد افزونه) در پوشهٔ .wordpress-org/ قرار دارند:
| فایل | ابعاد | کاربرد |
|---|---|---|
banner-1544x500.png |
۱۵۴۴×۵۰۰ | بنر بالای صفحهٔ افزونه (رتینا) |
banner-772x250.png |
۷۷۲×۲۵۰ | بنر استاندارد |
icon.svg |
مقیاسپذیر | آیکون افزونه در فهرست و صفحهٔ جزئیات (SVG کافی است، نیازی به PNG جداگانه نیست) |
logo.svg |
مقیاسپذیر | لوگوی کامل (آیکون + نام)، فقط برای استفادهٔ بیرونی مثل همین README |
این پوشه بخشی از کد افزونه نیست و در زیپ ارسالی به مخزن وردپرس قرار نمیگیرد. مخزن وردپرس این فایلها را از پوشهٔ assets/ در SVN میخواند — این پوشه فقط بعد از تأیید اولیهٔ افزونه ساخته میشود. بعد از تأیید:
svn co https://plugins.svn.wordpress.org/dadsoo-ajax-comment
cp .wordpress-org/banner-*.png .wordpress-org/icon.svg dadsoo-ajax-comment/assets/
svn add dadsoo-ajax-comment/assets/*
svn commit -m "Add plugin page banner and icon" dadsoo-ajax-comment
مجوز انتشار GPL v2 یا بالاتر است (فیلدهای License/License URI در سرتیتر افزونه و در readme.txt).
نام انگلیسی: Dadsoo Ajax Comment · نویسنده: ایمان شادمهری · حساب وردپرس: imansh · الین وب