=== EZ Login | ورود پیامکی، گوگل، ووکامرس، LearnDash و OTP ===
Contributors: drowranger
Tags: login, otp, sms, google, woocommerce
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.7.18
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

ورود و ثبت نام بدون رمز عبور با پیامک و گوگل، اعلان سفارشات، کد پیگیری و بازیابی سبد خرید رهاشده ووکامرس، سازگاری با LearnDash، ویجت المنتور و کنترل امنیتی.

== Description ==

EZ Login یک افزونه ورود و ثبت نام OTP برای وردپرس است. توسعه‌دهنده: Abolfazl Edalati (پروفایل WordPress.org: https://profiles.wordpress.org/drowranger/ و وب‌سایت: https://codsoft.ir/). این افزونه امکان ورود کاربران با شماره موبایل و کد یکبار مصرف، ورود با Google، فرم قابل استفاده در شورت کد و Elementor، کپچای ورود و ثبت نام، محدودسازی تلاش های ورود، اعلان سفارشات ووکامرس، ارسال کد پیگیری، بازیابی سبد خرید رهاشده و جایگزینی فرم ورود LearnDash را فراهم می کند.

تمرکز افزونه روی مسیرهای ورود قابل اعتماد است: پیامک و گوگل. ربات بله فقط برای ارسال اعلان سفارشات ووکامرس به مدیر سایت استفاده می شود و ورود کاربران با بله یا تلگرام در افزونه فعال نیست.

= امکانات اصلی =

* ورود و ثبت نام با شماره موبایل و OTP
* نمایش هر رقم OTP در یک باکس مستقل و زیبا، همراه با Paste، حرکت خودکار، Backspace و تکمیل خودکار مرورگر
* امکان انتخاب طول کد یک‌بارمصرف بین ۴ تا ۸ رقم
* نام پیش‌فرض قابل تنظیم برای کاربران جدید و ابزار Ajax اصلاح کاربران قدیمی در دسته‌های ۵۰تایی
* منوی «چنج‌لاگ» برای مشاهده امکانات و بهبودهای هر نسخه به زبان ساده
* ارسال پیامک با ملی پیامک، حالت پترن به صورت پیش فرض
* پشتیبانی هم‌زمان از نام کاربری/رمز قدیمی و API Key جدید ملی پیامک
* تست کامل ملی پیامک در همان صفحه تنظیمات پیامک
* ورود با Google OAuth
* نمایش فقط ویجت «EZ-Login پیشرفته» برای طراحی‌های جدید و حفظ داخلی ویجت قدیمی برای صفحات ساخته‌شده قبلی
* شورت کد `[ez-login]`
* شورت کد پیش فرض ورود + ثبت نام؛ امکان جدا کردن با mode
* تنظیم آدرس پیش فرض بعد از ورود برای همه فرم ها
* امکان تعیین ریدایرکت در خود شورت کد
* کپچای یکپارچه برای ورود و ثبت نام
* Rate Limit پیشرفته برای شماره موبایل، IP، User Agent و تلاش اشتباه کد تایید
* سفارشی سازی صفحه wp-login.php
* اعلان سفارشات ووکامرس از طریق پیامک
* پشتیبانی از پترن مستقل ملی پیامک برای OTP، مشتری سفارش، مدیر سفارش، کد پیگیری و سبد خرید رهاشده
* ارسال کد پیگیری سفارش ووکامرس از صفحه سفارش و نمایش آن در حساب کاربر
* بازیابی سبد خرید رهاشده با پیامک زمان‌بندی‌شده بعد از X ساعت
* ساخت کوپن اختصاصی درصدی یا مبلغ ثابت، محدود به همان کاربر و معتبر به مدت Y روز
* پنل مدیریت جدید و یکپارچه با دسترسی سریع به همه بخش‌ها
* راهنمای قدم‌به‌قدم و توضیح کامل متغیرهای پترن و قالب در هر بخش
* کنترل‌های کامل و دسته‌بندی‌شده استایل ویجت Elementor
* اعلان سفارشات ووکامرس به مدیران در بله
* سازگاری با LearnDash و جایگزینی لاگین LearnDash با EZ-Login
* ثبت چند مدیر بله با Chat ID یا از طریق دستور ثبت داخل ربات
* امکان ارسال اعلان بله به کانال یا گروه خصوصی

= راهنمای شورت کد =

شورت کد اصلی افزونه به صورت پیش فرض فرم ورود و ثبت نام را با هم نمایش می دهد:

`[ez-login]`

برای جدا کردن حالت ها می توانید از mode استفاده کنید:

* فقط ورود: `[ez-login mode="login"]`
* فقط ثبت نام: `[ez-login mode="register"]`
* ورود و ثبت نام تب بندی شده: `[ez-login mode="tabs"]`

برای تعیین آدرس بعد از ورود در همان شورت کد:

`[ez-login redirect_url="/my-account/"]`

فرم قدیمی `link` هم همچنان پشتیبانی می شود:

`[ez-login link="/my-account/"]`

اگر در تنظیمات عمومی افزونه «آدرس پیش فرض بعد از ورود» را وارد کنید، روی شورت کد، المنتور، ورود پیامکی و ورود با گوگل اعمال می شود؛ مقدار داخل شورت کد نسبت به تنظیم عمومی اولویت دارد.

= سازگاری با LearnDash =

در تنظیمات عمومی افزونه گزینه سازگاری با LearnDash به صورت پیش فرض فعال است. با فعال بودن این گزینه، خروجی شورت کد/فرم لاگین LearnDash با فرم ورود و ثبت نام EZ-Login جایگزین می شود. اگر خواستید لاگین پیش فرض LearnDash نمایش داده شود، این گزینه را غیرفعال کنید.

= کد پیگیری سفارش ووکامرس =

در تب پیامک های بخش اعلان سفارشات، گزینه «ارسال کد پیگیری» قابل فعال سازی است. بعد از فعال شدن، مدیر در صفحه ویرایش سفارش ووکامرس می تواند کد پیگیری را وارد کند، گزینه ارسال پیامک را بزند و سفارش را ذخیره کند. کد در متای سفارش ذخیره می شود و کاربر پس از ورود به حساب خود، داخل جزئیات همان سفارش کد پیگیری را می بیند.

= سبد خرید رهاشده ووکامرس =

وقتی ووکامرس فعال باشد، تب «سبد خرید رهاشده» در صفحه اعلان‌ها نمایش داده می‌شود. مدیر می‌تواند تعیین کند چند ساعت پس از آخرین فعالیت سبد، پیامک یادآوری ارسال شود. ارسال می‌تواند با پترن مستقل ملی‌پیامک یا متن عادی انجام شود.

افزونه می‌تواند همراه پیامک یک کوپن اختصاصی درصدی یا مبلغ ثابت بسازد. کوپن برای کاربر واردشده به شناسه همان کاربر محدود می‌شود و برای مهمان با توکن امن بازیابی، شماره موبایل و ایمیل کنترل می‌شود. مدت اعتبار کوپن بر حسب روز قابل تعیین است و لینک پیامک، محصولات و تعداد آن‌ها را دوباره به سبد برمی‌گرداند.

این قابلیت در نبود ووکامرس منو، پردازش زمان‌بندی‌شده یا هوک فروشگاهی فعال نمی‌کند.

= اعلان سفارشات در بله =

بخش اعلان سفارشات دو تب جدا دارد:

* پیامک ها: تنظیمات ارسال پیامک به مشتری و مدیر
* بله و اعلان مدیر: تنظیمات ربات بله، ثبت مدیرها، کانال یا گروه خصوصی و قالب پیام بله

برای بله می توانید چند Chat ID عددی مدیر وارد کنید، یا یک کانال/گروه خصوصی به ربات بدهید و مدیران را داخل آن عضو کنید. برای مدیرها نباید username مثل @username وارد شود؛ مقدار درست باید Chat ID عددی دریافت شده از وبهوک، دستور ثبت یا دستور /id باشد. همچنین مدیر می تواند از طریق دستور ثبت داخل ربات، Chat ID خودش را به افزونه اضافه کند. ربات فقط به دستورهای /start، /help، /id و دستور ثبت مدیر پاسخ می دهد و به پیام های عادی جواب خودکار نمی فرستد.

== External Services ==

این افزونه برای برخی قابلیت ها به سرویس های خارجی متصل می شود. استفاده از هر سرویس فقط در صورتی انجام می شود که همان قابلیت را در تنظیمات افزونه فعال و اطلاعات اتصال آن را وارد کرده باشید.

* ملی پیامک: برای ارسال کد یکبار مصرف، پیامک های سفارش و یادآوری سبد خرید رهاشده. اطلاعات ارسالی شامل شماره موبایل گیرنده، متن پیام یا کد پترن و متغیر پترن است. اتصال می‌تواند با نام کاربری/رمز قدیمی یا API Key انجام شود. سرویس: https://melipayamak.com/
* Google OAuth: برای ورود با گوگل. کاربر برای احراز هویت به Google هدایت می شود و پس از تایید، اطلاعات پایه حساب مثل ایمیل و نام برای ساخت یا ورود کاربر استفاده می شود. سرویس: https://accounts.google.com/
* Bale Bot API: فقط برای ارسال اعلان سفارشات ووکامرس به مدیران در بله. اطلاعات ارسالی شامل Chat ID مقصد و متن اعلان سفارش است. سرویس: https://tapi.bale.ai/
* Cloudflare Turnstile، Google reCAPTCHA یا hCaptcha: در صورت فعال کردن کپچا، پاسخ کپچا برای اعتبارسنجی به سرویس انتخاب شده ارسال می شود. سرویس ها: https://challenges.cloudflare.com/ ، https://www.google.com/recaptcha/ ، https://www.hcaptcha.com/

== Installation ==

1. پوشه افزونه را در مسیر `/wp-content/plugins/ez-login` آپلود کنید یا از بخش افزونه های وردپرس نصب کنید.
2. افزونه را فعال کنید.
3. از منوی EZ-Login، تنظیمات پیامک و گوگل را انجام دهید.
4. برای نمایش فرم از شورت کد `[ez-login]` یا ویجت Elementor افزونه استفاده کنید.
5. برای اعلان سفارشات و بازیابی سبد رهاشده، از منوی «اعلان‌ها و سبد رهاشده» تنظیمات موردنظر را فعال کنید.

== Frequently Asked Questions ==

= آیا ورود با بله یا تلگرام وجود دارد؟ =

خیر. برای جلوگیری از پیچیدگی و خطا در ورود کاربران، ورود مستقیم با بله و تلگرام در افزونه فعال نیست. بله فقط برای اعلان سفارشات ووکامرس به مدیر سایت استفاده می شود.

= آیا ملی پیامک با پترن کار می کند؟ =

بله. حالت پترن به صورت پیش فرض فعال است. پترن OTP باید یک متغیر `{0}` داشته باشد. در صفحه تنظیمات پیامک، تست کامل ملی پیامک وجود دارد که روش اتصال، API Key یا نام کاربری/رمز، Body ID، متغیر پترن، شماره ارسال، کد HTTP و پاسخ سرویس را بررسی می‌کند؛ آدرس‌های داخلی سرویس و اطلاعات محرمانه نمایش داده نمی‌شوند.

= آیا اتصال API Key ملی پیامک پشتیبانی می شود؟ =

بله. در تنظیمات ورود با پیامک، روش احراز هویت را روی «API Key / Console API» قرار دهید، کلید API را وارد کنید و تست کامل را اجرا کنید. روش قدیمی نام کاربری و رمز حذف نشده است. آدرس‌های داخلی سرویس به‌صورت خودکار مدیریت می‌شوند و در رابط کاربری نمایش داده نمی‌شوند.

= آیا می توان چند مدیر را برای اعلان بله ثبت کرد؟ =

بله. می توانید Chat ID عددی مدیرها را در تنظیمات وارد کنید یا با فعال کردن وبهوک، مدیرها از داخل ربات و با دستور ثبت، خودشان Chat ID را ثبت کنند. username مثل @username برای ارسال مستقیم معتبر نیست و ممکن است خطای no such group or user بدهد. اگر مدیر از ربات خارج شود یا چت را پاک کند، دوباره دستور /id یا دستور ثبت را داخل ربات ارسال کند.

= آیا می توان اعلان بله را به کانال یا گروه خصوصی فرستاد؟ =

بله. ربات را به کانال یا گروه خصوصی اضافه کنید، Chat ID مقصد را در تنظیمات وارد کنید و گزینه ارسال به کانال/گروه خصوصی را فعال کنید.

= سبد خرید رهاشده چگونه تشخیص داده می‌شود؟ =

بعد از اضافه شدن یا تغییر محصول، آخرین وضعیت سبد ثبت می‌شود. برای مهمان، ارسال پیامک زمانی ممکن است که شماره موبایل در تسویه‌حساب وارد شده باشد. اگر تا زمان تعیین‌شده سفارش ساخته نشود، یادآوری ارسال می‌شود؛ ساخت سفارش، همان سبد را به وضعیت تبدیل‌شده تغییر می‌دهد.

= آیا افزونه با Elementor سازگار است؟ =

بله. ویجت قدیمی EZ-Login برای حفظ صفحات قبلی بدون تغییر باقی مانده و ویجت جدید «EZ-Login پیشرفته» با تنظیمات بخش‌بندی‌شده، حالت ورود/ثبت‌نام یکپارچه، ریدایرکت صفحه فعلی، مای‌اکانت ووکامرس یا لینک دلخواه، جایگاه لوگو و چند استایل آماده دارک و لایت اضافه شده است. شورت کد `[ez-login]` نیز همچنان قابل استفاده است.

= طول کد OTP چگونه تغییر می‌کند؟ =

از منوی «ورود با پیامک» تعداد ارقام کد را بین ۴ تا ۸ تعیین کنید. فرم ورود به همان تعداد باکس جداگانه می‌سازد و همان طول در تولید، ارسال، اعتبارسنجی و تست پیامک استفاده می‌شود. پترن ملی‌پیامک همچنان تنها یک متغیر `{0}` دارد و کل کد را در همان متغیر دریافت می‌کند.

= نام پیش‌فرض کاربران جدید و ابزار کاربران قدیمی چگونه کار می‌کند؟ =

در بخش «ثبت‌نام و فیلدها» نام پیش‌فرض را مشخص کنید. اگر کاربر نامی وارد نکند، first name، nickname و display name با همان مقدار ساخته می‌شوند. در منوی «ابزارها» می‌توانید کاربران قدیمی شناسایی‌شده توسط EZ-Login را در دسته‌های ۵۰تایی و بدون تغییر نام کاربری، رمز، ایمیل یا شماره موبایل اصلاح کنید؛ حساب‌های مدیر نادیده گرفته می‌شوند.

= چنج‌لاگ افزونه را از کجا ببینم؟ =

از منوی داخلی «تغییرات نسخه‌ها» می‌توانید امکانات و بهبودهای مهم هر نسخه را بدون توضیحات فنی مربوط به فایل‌ها مشاهده کنید.

= آیا افزونه با Perfmatters و Remove Unused CSS سازگار است؟ =

بله. از نسخه 1.7.2 نمایش مرحله دریافت کد و مرحله تایید OTP به CSS پویا وابسته نیست و با Remove Unused CSS سازگار شده است. بعد از بروزرسانی، کش Perfmatters و فایل‌های CSS استفاده‌شده را یک بار پاک و دوباره تولید کنید.

== Screenshots ==

1. تنظیمات عمومی افزونه
2. تنظیمات ورود با پیامک و تست کامل ملی پیامک
3. فرم ورود با شماره موبایل و گوگل
4. تنظیمات اعلان سفارشات پیامکی
5. تنظیمات اعلان سفارشات در بله
6. ویجت Elementor و دسته‌بندی کنترل‌های استایل
7. تنظیمات سبد خرید رهاشده و کوپن اختصاصی

== Changelog ==

<!-- فقط ۱۵ چنج‌لاگ آخر نمایش داده شود. تا زمانی که نسخه اصلی از 1.7 به 1.8 تغییر نکرده، همه تغییرات شاخه 1.7 در یک چنج‌لاگ تجمیعی نوشته شوند. -->

= 1.7.1 تا 1.7.18 =
* شماره متغیرهای پیامک و بله در همه بخش‌ها ثابت شد؛ برای نمونه {4} همیشه نام سایت است.
* دکمه پیش‌نمایش جلوی هر وضعیت پیامک و قالب بله با اطلاعات نمونه واقعی اضافه شد.
* کارت‌های اصلی ورود با پیامک مرتب و در نمایشگرهای کوچک به‌صورت دو ستونه چیده شدند.
* تنظیمات اجبار EZ-Login، ریدایرکت و LearnDash در یک ردیف هماهنگ قرار گرفتند.
* پیش‌نمایش تنظیمات شورت‌کد و صفحه ورود مدیریت هنگام اسکرول چسبان باقی می‌ماند.
* دامنه سایت کنار فیلد آدرس ورود اختصاصی مدیریت نمایش داده می‌شود.
* کپچای عمومی به منوی «امنیت و کپچا» منتقل و با تنظیمات امنیتی یکپارچه شد.
* OTP در باکس‌های جداگانه نمایش داده می‌شود و طول کد بین ۴ تا ۸ رقم قابل انتخاب است.
* نام پیش‌فرض کاربران جدید قابل تغییر شد و ابزار اصلاح کاربران قدیمی در دسته‌های ۵۰تایی اضافه شد.
* استایل‌های آماده دارک و لایت برای Elementor، شورت‌کد و صفحه ورود مدیریت اضافه شد.
* ویجت پیشرفته Elementor با حفظ کامل ویجت‌های استفاده‌شده در صفحات قدیمی ارائه شد.
* ویرایشگر دو ستونه شورت‌کد با پیش‌نمایش زنده، جایگاه لوگو و استایل مستقل اجزای فرم اضافه شد.
* پترن مستقل وضعیت‌های سفارش، کد پیگیری و سبد خرید رهاشده با Body ID جداگانه اضافه شد.
* بازیابی سبد خرید رهاشده با پیامک زمان‌بندی‌شده و کوپن اختصاصی همان کاربر اضافه شد.
* پنل یکپارچه Ajax، سایدبار داخلی، فونت Vazirmatn و دکمه ذخیره چسبان ارائه شد.
