Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/kamranhajhossein/persian-text-normalizer/releases/download/v1.0.0/persian-text-normalizer.zipیکسانساز متن فارسی برای وردپرس و ووکامرس
کاربر در جستجوی سایت مینویسد «كتاب» (با ک عربی)، محصول شما «کتاب» است، و نتیجهای پیدا نمیشود. مشتری شماره را با ارقام فارسی «۰۹۱۲…» وارد میکند و تسویهحساب ووکامرس، پنل پیامک یا درگاه پرداخت خطا میدهد. یک نویسنده با کیبورد عربی «ي» تایپ میکند و حالا دو نشانی برای یک موضوع دارید.
این پلاگین همهٔ اینها را بیسروصدا و بدون خراب کردن چیزی درست میکند.
فهرست: قبل و بعد · امکانات · نصب · اصلاح محتوای قبلی · مستثنا کردن · سازگاری · سؤالات متداول · توسعهدهندگان
قبل و بعد
| ورودی | ذخیره میشود | جستجو میشود | در فیلد تلفن/کد پستی |
|---|---|---|---|
كتاب هاي جديد |
کتاب های جدید |
کتاب های جدید |
— |
سال ١٤٠٥ |
سال ۱۴۰۵ |
سال ۱۴۰۵ |
1405 |
میخواهم (چند نیمفاصله) |
میخواهم |
می خواهم |
— |
مُحَمَّـــد |
بدون تغییر* | محمد |
— |
خانهٔ من |
بدون تغییر | خانه من |
— |
۰۹۱۲۱۲۳۴۵۶۷ |
بدون تغییر | بدون تغییر | 09121234567 |
* حذف اِعراب و کشیده از متن ذخیرهشده در تنظیمات قابل روشن شدن است.
چرا مهم است؟
- فروش از دسترفته: کاربری که با کیبورد ویندوز یا گوشی عربیدار جستجو میکند، محصول موجود را «ناموجود» میبیند.
- سفارش ثبتنشده:
is_phone()و اعتبارسنجی بسیاری از درگاهها و پنلهای پیامک ارقام فارسی را رد میکنند و مشتری وسط تسویهحساب رها میکند. - سئو: «ي» و «ی» برای گوگل دو حرف متفاوتاند. نامکها و عنوانهای ناهمسان یعنی محتوای تکراری و پخش شدن اعتبار صفحه.
امکانات
| کجا | چه اتفاقی میافتد |
|---|---|
| ذخیرهٔ نوشته، برگه و محصول | «ي، ى، ك» ← «ی، ک»، ارقام عربی «٠١٢» ← فارسی «۰۱۲»، نیمفاصلههای تکراری یا بیجا حذف میشوند. فقط متن تغییر میکند؛ تگها، کلاسها، لینکها، بلوکهای گوتنبرگ، <code> و <pre> دست نمیخورند. |
| جستجو (سایت و محصولات ووکامرس) | حروف عربی، اِعراب و کشیده یکسان میشوند و نیمفاصله مثل فاصله حساب میشود؛ پس «ميخواهم» هم «میخواهم» را پیدا میکند و «خانهٔ» هم «خانه» را. |
| فرمها و تسویهحساب | ارقام فارسی و عربی در فیلدهای تلفن، موبایل، کد پستی، کد ملی، شبا و کد تأیید به انگلیسی تبدیل میشوند. ووکامرس کلاسیک، تسویهحساب بلوکی (Store API)، Contact Form 7، Gravity Forms و هر فرمی که POST میکند. |
| نامک (Slug) | نامکهای جدید یکسان ساخته میشوند تا نشانی تکراری نسازید. نامکهای موجود هرگز تغییر نمیکنند، پس رتبهٔ سئو و لینکها امناند. |
| دیدگاهها، دستهها، برچسبها و ویژگیهای محصول | همان یکسانسازی. |
| محتوای قدیمی | ابزار «اصلاح محتوای موجود» با حالت بررسی بدون تغییر و پردازش دستهای. تاریخ ویرایش، رونوشتها و نامکها دست نمیخورند. |
نصب
۱. فایل persian-text-normalizer.zip را از آخرین نسخه دانلود کنید.
۲. پیشخوان ← افزونهها ← افزودن ← بارگذاری افزونه.
۳. فعال کنید. همین؛ تنظیمات پیشفرض برای بیشتر سایتها مناسب است.
تنظیمات و ابزار اصلاح در ابزارها ← یکسانساز فارسی است. همانجا یک جعبهٔ «امتحان کنید» هست که نشان میدهد هر متن چطور ذخیره و جستجو میشود (نیمفاصلهها با رنگ زرد نمایش داده میشوند).
اصلاح محتوای قبلی
قبل از هر کاری پشتیبان بگیرید. بعد:
۱. «بررسی (بدون تغییر)» را بزنید تا ببینید چند نوشته و دسته نیاز به اصلاح دارند و نمونهها را چک کنید. ۲. «اصلاح همه» را بزنید.
یا با WP-CLI:
wp ptn fix --dry-run # فقط گزارش
wp ptn fix # اصلاح همه
wp ptn fix --post_type=product,page # فقط این نوعها
wp ptn test "كتابهاي ١٤٠٥" # ببینید یک متن چطور یکسان میشود
مستثنا کردن یک بخش
برای آیات قرآن یا متن عربی که باید دقیقاً همانطور بماند:
[ptn_ignore]بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ[/ptn_ignore]
<!-- ptn:ignore -->
<p>متن عربی که نباید تغییر کند</p>
<!-- /ptn:ignore -->
شورتکد [ptn_ignore] در خروجی سایت هیچ اثری ندارد و فقط محتوایش را محافظت میکند.
فیلترها برای توسعهدهندگان
| فیلتر | کاربرد |
|---|---|
ptn_normalizer_options |
تغییر گزینههای یکسانسازی محتوای ذخیرهشده |
ptn_digit_fields_pattern |
الگوی regex نام فیلدهایی که ارقامشان انگلیسی شود |
ptn_digit_rest_routes |
مسیرهای REST که ارقامشان انگلیسی شود (پیشفرض /wc/store) |
ptn_skip_post_types |
نوعهایی که هنگام ذخیره نادیده گرفته شوند |
ptn_bulk_post_types |
نوعهایی که ابزار اصلاح دستهای پردازش میکند |
ptn_normalize_admin_search |
خاموش کردن یکسانسازی جستجو در پیشخوان |
استفادهٔ مستقیم در کد خودتان:
$n = new PTN_Normalizer();
$n->text( 'كتاب يك' ); // «کتاب یک»
$n->html( '<p class="ي">ي</p>' ); // فقط متن تغییر میکند: <p class="ي">ی</p>
PTN_Normalizer::search( 'مُحَمَّـد' ); // «محمد»
PTN_Normalizer::latin_digits( '۰۹۱۲' ); // «0912»
سازگاری
- وردپرس ۶٫۰ به بالا، PHP ۷٫۴ تا ۸٫۳
- ووکامرس: تسویهحساب کلاسیک و بلوکی، سازگار اعلامشده با HPOS
- ویرایشگر بلوکی (گوتنبرگ) و ویرایشگر کلاسیک. صفحهسازهایی مثل المنتور که محتوا را در متادیتا نگه میدارند فعلاً پوشش داده نمیشوند؛ جستجو و فرمها در آنها هم کار میکنند.
- Contact Form 7، Gravity Forms، WPForms و هر فرمی که با POST ارسال میشود
- Yoast و Rank Math (عنوان و محتوای یکسانشده را میخوانند؛ نامکهای موجود تغییر نمیکنند)
- پایگاه دادهٔ MySQL/MariaDB و SQLite
سؤالات متداول
محتوای قبلیام خودکار عوض میشود؟نه. فقط محتوایی که از این به بعد ذخیره میشود یکسان میشود. برای محتوای قبلی باید خودتان از «اصلاح محتوای موجود» یا wp ptn fix استفاده کنید؛ اول هم حالت بررسی بدون تغییر را اجرا کنید.
نه. نامک موجود هیچوقت تغییر نمیکند، نه هنگام ذخیرهٔ دوباره و نه در اصلاح دستهای. جستجوی نشانیها هم دستنخورده میماند، پس لینکهای قدیمی با «ي» همچنان کار میکنند.
متن عربی یا آیات قرآن سایتم خراب میشود؟اِعراب بهصورت پیشفرض حفظ میشود. اگر میخواهید حتی «ي» و «ك» عربی هم بماند، آن بخش را داخل [ptn_ignore] بگذارید (پایینتر توضیح داده شده).
محتوای یکسانشده همانطور میماند که چیز خوبی است، و با حذف پلاگین فقط تنظیماتش پاک میشود. هیچ جدول یا دادهٔ اضافهای در پایگاه داده نمیسازد.
روی سایت بزرگ با هزاران محصول کند نیست؟نه. متنهایی که حرف فارسی و عربی ندارند فوراً رد میشوند. اصلاح دستهای هم ۵۰ تایی (در WP-CLI ۲۰۰ تایی) جلو میرود و مستقیم در پایگاه داده مینویسد، بدون ساختن رونوشت.
جستجوی «میخواهم» بدون نیمفاصله «میخواهم» را پیدا میکند؟نه. جستجوی وردپرس کلمهها را با LIKE مقایسه میکند و «میخواهم» یک کلمهٔ پیوسته است. برعکسش، یعنی «میخواهم» یا «می خواهم» که «میخواهم» یا «میخواهم» را پیدا کنند، کار میکند.
چه چیزی را عمداً تغییر نمیدهد
- ارقام انگلیسی داخل متن (فقط در فیلدهای عددی فرمها تبدیل انجام میشود).
- «ة» به «ه» (پیشفرض خاموش؛ از تنظیمات روشن میشود).
- اِعراب و کشیده در متن ذخیرهشده (پیشفرض خاموش؛ جستجو همیشه آنها را نادیده میگیرد).
- نامکها و نشانیهای موجود، تاریخ ویرایش و رونوشتها.
- تگها و ویژگیهای HTML، کامنتهای بلوک گوتنبرگ، `
Releases
1 release. Each count is every asset in that release; expand a row for the breakdown.