Skip to content

این افزونه برای نرمالایز کردن نام و توضیحات محصولات فارسی در وردپرس طراحی شده است. این افزونه مشکلات جستجو در متن فارسی را حل می‌کند و فیلدهای متا برای بهبود جستجو اضافه می‌کند.

License

Notifications You must be signed in to change notification settings

barmaandev/searchdoon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

searchdoon

توسعه‌دهنده: Barmaan Shokoohi

نرمالایز کردن چیست؟

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

  • تبدیل کاراکترهای عربی به فارسی: تبدیل حروف عربی (ي، ك، ة) به معادل فارسی (ی، ک، ه)
  • یکسان‌سازی فاصله‌ها: حذف فاصله‌های اضافی و تبدیل انواع مختلف فاصله به فاصله استاندارد
  • حذف کلمات اضافی: حذف کلمات توقف (stopwords) که در جستجو مفید نیستند
  • تولید کلمات کلیدی: ایجاد کلمات کلیدی بهینه برای جستجو

چرا نرمالایز کردن مهم است؟

در زبان فارسی، یک کلمه ممکن است به شکل‌های مختلف نوشته شود:

  • "مردک" یا "مردك" (ک عربی یا فارسی)
  • "خانه‌ای" یا "خانه‌ ای" (با یا بدون نیم‌فاصله)
  • "یادگیری" یا "يادگيري" (ی عربی یا فارسی)

نرمالایز کردن این تفاوت‌ها را برطرف کرده و جستجو را دقیق‌تر می‌کند.

این افزونه برای نرمالایز کردن نام و توضیحات محصولات فارسی در وردپرس طراحی شده است. این افزونه مشکلات جستجو در متن فارسی را حل می‌کند و فیلدهای متا برای بهبود جستجو اضافه می‌کند.

توسعه‌دهنده: Barmaan Shokoohi

ویژگی‌ها

🔧 نرمالایز کردن متن فارسی

  • تبدیل کاراکترهای عربی به فارسی (ی، ک، ه)
  • نرمالایز کردن فاصله‌ها و اعداد
  • حذف کلمات اضافی فارسی

📊 پردازش دسته‌ای

  • پردازش خودکار تمام محصولات موجود
  • نمایش پیشرفت در زمان واقعی
  • عدم تداخل با عملکرد سایت
  • قابلیت توقف و ادامه پردازش

🎯 بهبود جستجو

  • بهبود جستجوی WordPress
  • نتایج جستجوی دقیق‌تر
  • سورت نهایی بر اساس جدیدترین محصولات موجود
  • نمایش محصولات ناموجود در انتها

📱 رابط کاربری فارسی

  • رابط کاربری کاملاً فارسی
  • پشتیبانی از RTL
  • طراحی ریسپانسیو
  • گزارش‌گیری کامل

نصب و راه‌اندازی

1. نصب افزونه

  1. فایل‌های افزونه را در پوشه wp-content/plugins/searchdoon آپلود کنید
  2. از طریق پنل مدیریت وردپرس، افزونه را فعال کنید
  3. به بخش "ابزارها > سرچ‌دون" بروید

2. تنظیمات اولیه

  1. اندازه دسته پردازش را تنظیم کنید (پیشنهاد: 50)
  2. گزینه حذف کلمات اضافی را فعال کنید
  3. تنظیمات را ذخیره کنید

3. شروع پردازش

  1. روی "شروع پردازش دسته‌ای" کلیک کنید
  2. پیشرفت را مشاهده کنید
  3. منتظر تکمیل پردازش بمانید

نحوه استفاده

کلید متا برای داده‌های نرمالایز شده

داده‌های نرمالایز شده در کلید متای زیر ذخیره می‌شوند:

$meta_key = '_searchdoon_data';

ساختار داده‌های نرمالایز شده

$normalized_data = array(
    'title' => 'عنوان نرمالایز شده محصول',
    'content' => 'محتوای نرمالایز شده محصول', 
    'excerpt' => 'خلاصه نرمالایز شده محصول',
    'search_keywords' => 'کلمات کلیدی تولید شده برای جستجو',
    'normalized_at' => '2024-01-01 12:00:00'
);

نمونه کوئری‌های جستجو

جستجو در عنوان نرمالایز شده

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => '_searchdoon_data',
            'value' => 'کلمه جستجو',
            'compare' => 'LIKE'
        )
    )
);
$products = get_posts($args);

جستجو در کلمات کلیدی

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => '_searchdoon_data',
            'value' => 'کلمه کلیدی',
            'compare' => 'LIKE'
        )
    )
);
$products = get_posts($args);

جستجو پیشرفته با چندین فیلد

$search_term = 'کلمه جستجو';
$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => '_searchdoon_data',
            'value' => $search_term,
            'compare' => 'LIKE'
        ),
        array(
            'key' => '_searchdoon_data',
            'value' => $search_term,
            'compare' => 'LIKE'
        )
    )
);
$products = get_posts($args);

جستجو با استفاده از WP_Query

$query = new WP_Query(array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => '_searchdoon_data',
            'value' => 'کلمه جستجو',
            'compare' => 'LIKE'
        )
    ),
    'posts_per_page' => 10,
    'orderby' => 'date',
    'order' => 'DESC'
));

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // نمایش محصول
    }
    wp_reset_postdata();
}

پردازش دسته‌ای

// شروع پردازش تمام محصولات
$normalizer = BWD_Persian_Product_Normalizer::get_instance();
$normalizer->process_all_products();

نرمالایز کردن متن

// نرمالایز کردن متن فارسی
$normalized_text = $normalizer->normalize_persian_text($text);

دریافت داده‌های نرمالایز شده

// دریافت داده‌های نرمالایز شده محصول
$normalized_data = get_post_meta($product_id, '_searchdoon_data', true);

ساختار فایل‌ها

persian-product-normalizer/
├── persian-product-normalizer.php        # فایل اصلی افزونه
├── templates/
│   └── admin-page.php                    # قالب صفحه مدیریت
├── assets/
│   ├── js/
│   │   └── admin.js                      # اسکریپت‌های مدیریت
│   └── css/
│       └── admin.css                     # استایل‌های مدیریت
└── README.md                             # مستندات

تنظیمات

اندازه دسته پردازش

  • مقدار پیش‌فرض: 50
  • محدوده: 10 تا 200
  • توصیه: برای سایت‌های بزرگتر، مقدار کمتری انتخاب کنید

حذف کلمات اضافی

  • کلمات حذف شده: از، به، در، با، برای، که، این، آن، را، و، یا
  • قابل تنظیم: بله
  • توصیه: برای جستجوی بهتر فعال کنید

لیست‌ها

حروف جایگزین (نرمالایز کاراکترهای عربی ⇢ فارسی)

  • ي ⇢ ی
  • ك ⇢ ک
  • ة ⇢ ه
  • ئ ⇢ ی
  • أ ⇢ ا
  • إ ⇢ ا
  • ٱ ⇢ ا
  • ؤ ⇢ و

فاصله‌ها و جداسازها

  • فاصله معمولی (U+0020): چند فاصلهٔ پیاپی به یک فاصله تبدیل می‌شود
  • فاصلهٔ غیرقابل‌شکستن NBSP (U+00A0): به فاصلهٔ معمولی تبدیل می‌شود
  • نیم‌فاصله ZWNJ (U+200C): در صورت لزوم حفظ می‌شود؛ فاصله‌های نامعتبر اطراف حذف می‌شوند
  • تب (U+0009) و خط جدید: بسته به متن، به فاصلهٔ معمولی تبدیل یا تراشیده می‌شوند

کلمات توقف (Stopwords) پیش‌فرض

  • از
  • به
  • در
  • با
  • برای
  • که
  • این
  • آن
  • را
  • و
  • یا

API و هوک‌ها

هوک‌های موجود

// قبل از نرمالایز کردن
do_action('bwd_before_normalize', $post_id, $post);

// بعد از نرمالایز کردن
do_action('bwd_after_normalize', $post_id, $normalized_data);

// قبل از پردازش دسته‌ای
do_action('bwd_before_batch_process');

// بعد از پردازش دسته‌ای
do_action('bwd_after_batch_process', $processed_count);

فیلترهای موجود

// فیلتر کردن کلمات اضافی
$stopwords = apply_filters('bwd_stopwords', $default_stopwords);

// فیلتر کردن کاراکترهای جایگزین
$replacements = apply_filters('bwd_character_replacements', $default_replacements);

// فیلتر کردن اندازه دسته
$batch_size = apply_filters('bwd_batch_size', 50);

عیب‌یابی

مشکلات رایج

1. پردازش متوقف می‌شود

  • علت: محدودیت حافظه یا زمان اجرا
  • راه‌حل: اندازه دسته را کاهش دهید

2. جستجو بهبود نمی‌یابد

  • علت: محصولات نرمالایز نشده‌اند
  • راه‌حل: پردازش دسته‌ای را اجرا کنید

3. خطای پایگاه داده

  • علت: جدول پیشرفت ایجاد نشده
  • راه‌حل: افزونه را غیرفعال و دوباره فعال کنید

لاگ‌ها

// فعال کردن لاگ‌ها
define('BWD_DEBUG', true);

// مشاهده لاگ‌ها
error_log('BWD Debug: ' . $message);

بهینه‌سازی

عملکرد

  • استفاده از پردازش دسته‌ای
  • کش کردن نتایج
  • بهینه‌سازی کوئری‌های SQL

امنیت

  • اعتبارسنجی ورودی‌ها
  • استفاده از nonce
  • بررسی مجوزهای کاربر

پشتیبانی

نسخه‌های سازگار

  • WordPress 5.0+
  • PHP 7.4+
  • WooCommerce 5.0+ (اختیاری)

مرورگرهای پشتیبانی شده

  • Chrome 80+
  • Firefox 75+
  • Safari 13+
  • Edge 80+

تغییرات نسخه

نسخه 1.0.0

  • انتشار اولیه
  • نرمالایز کردن متن فارسی
  • پردازش دسته‌ای
  • رابط کاربری فارسی
  • بهبود جستجو

مشارکت

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

  1. کد را fork کنید
  2. شاخه جدید ایجاد کنید
  3. تغییرات را commit کنید
  4. Pull Request ارسال کنید

لایسنس

این افزونه تحت لایسنس GPL v3 یا بالاتر منتشر شده است.

تماس


نکته: قبل از استفاده در محیط تولید، حتماً از سایت خود پشتیبان تهیه کنید.

About

این افزونه برای نرمالایز کردن نام و توضیحات محصولات فارسی در وردپرس طراحی شده است. این افزونه مشکلات جستجو در متن فارسی را حل می‌کند و فیلدهای متا برای بهبود جستجو اضافه می‌کند.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published