🛒 سبد خرید 0

سبد خرید شما در حال حاضر خالی است. ✨

رفع خطاهای رایج افزونه سمافاکتور

رفع خطاهای رایج افزونه سمافاکتور
مرکز جامع عیب‌یابی و راهنمای کامل حل مشکلات افزونه‌های فاکتور ووکامرس (سمافاکتور)

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

مرجع تخصصی: وب‌سایت رسمی سماویه (samavie.ir)

کلمات کلیدی سئو: افزونه فاکتور ووکامرس, سمافاکتور, سماویه, samavie.ir, فاکتور تذهیب ووکامرس, دانلود PDF فاکتور فارسی, رفع مشکل فونت PDF ووکامرس, مشکل علامت سوال در PDF, خروجی اکسل فاکتور ووکامرس, فاکتور رسمی با کد اقتصادی, چاپ فاکتور A4 و A5 ووکامرس, فیش پرینتر حرارتی ووکامرس, حل مشکل RTL در mPDF, مشکل لایسنس افزونه وردپرس, کادربندی اسلیمی و گل و بلبل, فاکتور شیک ووکامرس

توضیحات معرفی و خلاصه

سمافاکتور (SamaFactor) قدرتمندترین و زیباترین افزونه صدور، چاپ و اشتراک‌گذاری فاکتورهای رسمی و تذهیب ووکامرس در ایران است که توسط تیم تخصصی سماویه برای حل تمام چالش‌های صدور فاکتور، خروجی PDF بدون بهم‌ریختگی فونت فارسی و خروجی اکسل دقیق توسعه یافته است.

کد مشکل 1: خطای “فایل زیپ معتبر نیست” یا “پوشه افزونه دارای فایل اصلی plugin.php نیست”

❌ نشانه خطا: هنگام آپلود فایل zip در پیشخوان وردپرس، خطای عدم وجود فایل اصلی یا عدم اعتبار فایل زیپ نمایش داده می‌شود.

🔍 علت ریشه‌ای: فایل دانلود شده ابتدا باید آنزیپ شود (Double Zip) یا ساختار پوشه‌های داخلی در آرشیو زیپ به درستی استخراج نشده است.

✅ راهکار رفع مشکل:

فایل دانلود شده را روی سیستم آنزیپ کنید. مطمئن شوید پوشه داخلی مستقیماً شامل فایل samafactor.php یا tazhib-invoice.php است و سپس آن پوشه را مجدداً زیپ کرده و در مسیر افزونه‌ها آپلود کنید.

// ساختار استاندارد فایل‌های افزونه سمافاکتور در پوشه /wp-content/plugins/samafactor/
samafactor/
├── samafactor.php (فایل اصلی)
├── readme.txt
├── assets/
│   ├── css/tazhib-style.css
│   └── js/tazhib-script.js
└── includes/
    ├── class-samafactor-pdf.php
    └── class-samafactor-admin.php

کد مشکل 2: خطای Fatal Error: Cannot redeclare class SamaFactor_Invoice

❌ نشانه خطا: هنگام فعال‌سازی افزونه، خطای تعاریف تکراری کلاس یا توابع وردپرس ظاهر می‌شود.

🔍 علت ریشه‌ای: نسخه قدیمی یا آزمایشی دیگری از افزونه سمافاکتور در مسیر افزونه‌ها وجود دارد یا کلاسی با نام مشابه توسط قالب بارگذاری شده است.

✅ راهکار رفع مشکل:

نسخه‌های قدیمی افزونه را از طریق هاست (مسیر wp-content/plugins) غیرفعال یا حذف کنید. افزونه از شرط class_exists برای جلوگیری از این خطا استفاده می‌کند.

if ( ! class_exists( 'SamaFactor_Invoice' ) ) {
    class SamaFactor_Invoice {
        // کلاس اصلی افزونه سمافاکتور
    }
}

کد مشکل 3: خطای PHP Parse Error: syntax error, unexpected T_STRING در نسخه قدیمی PHP

❌ نشانه خطا: پس از فعال‌سازی، خطای سنتکس PHP در لاگ‌های هاست ثبت می‌شود.

🔍 علت ریشه‌ای: سرور هاست شما از نسخه منسوخ شده PHP (کمتر از 7.4) استفاده می‌کند در حالی که سمافاکتور نیازمند PHP 7.4 یا 8.1+ است.

✅ راهکار رفع مشکل:

وارد cPanel یا DirectAdmin هاست خود شوید و در بخش Select PHP Version، نسخه PHP را به حداقل 8.1 یا 8.2 ارتقا دهید.

کد مشکل 4: صفحه سفید مرگ وردپرس (White Screen of Death – WSOD) پس از فعال‌سازی

❌ نشانه خطا: کل پیشخوان یا سایت پس از زدن دکمه فعال‌سازی افزونه کاملاً سفید و بی‌متن می‌شود.

🔍 علت ریشه‌ای: اغلب به دلیل اتمام حافظه تخصیص یافته PHP سرور (Memory Exhaustion) یا تداخل یک خطای نامشخص.

✅ راهکار رفع مشکل:

مقدار WP_MEMORY_LIMIT را در فایل wp-config.php افزایش دهید و حالت دیباگ را فعال کنید تا خطای دقیق مشخص شود.

// افزوده شود به فایل wp-config.php
define( 'WP_MEMORY_LIMIT', '512M' );
define( 'WP_MAX_MEMORY_LIMIT', '1024M' );
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

کد مشکل 5: عدم نمایش منوی “سمافاکتور” در منوی سمت راست پیشخوان وردپرس

❌ نشانه خطا: افزونه فعال است اما گزینه‌ای برای تنظیمات فاکتور در مدیریت دیده نمی‌شود.

🔍 علت ریشه‌ای: نقش کاربری فعلی شما دسترسی manage_options ندارد یا منو زیرمجموعه منوی “ووکامرس” یا “تنظیمات” رفته است.

✅ راهکار رفع مشکل:

بررسی کنید با حساب مدیرکل (Administrator) وارد شده باشید. همچنین پیشخوان را رفرش کرده و زیرمنوی “ووکامرس > فاکتور تذهیب” را بررسی کنید.

کد مشکل 6: خطای “You do not have sufficient permissions to access this page”

❌ نشانه خطا: هنگام کلیک روی برگه تنظیمات سمافاکتور، خطای عدم دسترسی کافی نمایش داده می‌شود.

🔍 علت ریشه‌ای: اختلال در جدول Role & Capabilities وردپرس یا استفاده از افزونه‌های مدیریت سطح دسترسی مانند User Role Editor.

✅ راهکار رفع مشکل:

با قابلیت manage_options بررسی کنید. کد زیر را در functions.php قالب فرزند قرار دهید تا دسترسی مجدداً به مدیر کل اعطا شود.

add_action('admin_init', function() {
    $role = get_role('administrator');
    if ($role) {
        $role->add_cap('manage_samafactor_invoices');
    }
});

کد مشکل 7: عدم بارگیری استایل‌ها و آیکون‌های افزونه در صفحه تنظیمات

❌ نشانه خطا: صفحه تنظیمات افزونه به شکل متنی و بدون ظاهر شکیل و بدون فونت نمایش داده می‌شود.

🔍 علت ریشه‌ای: مسدود شدن فایل‌های CSS/JS توسط افزونه‌های کش یا خطای SSL/Mixed Content.

✅ راهکار رفع مشکل:

کش افزونه‌های LiteSpeed یا WP Rocket را خالی کنید و از فعال بودن SSL (HTTPS) درست روی دامنه مطمئن شوید.

کد مشکل 8: خطای Direct Access Forbidden هنگام فراخوانی فایل‌های PHP افزونه

❌ نشانه خطا: هنگام دسترسی مستقیم به لینک فایل‌ها پیام امنیتی Direct Access نمایش داده می‌شود.

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

✅ راهکار رفع مشکل:

این یک خطا نیست بلکه حفاظت امنیتی است. تمام دستورات باید از طریق اکشن‌های استاندارد وردپرس (admin_post یا AJAX) اجرا شوند.

کد مشکل 9: خطای “The package could not be installed. PCLZIP_ERR_BAD_FORMAT (-10)”

❌ نشانه خطا: هنگام آپلود فایل زیپ در وردپرس خطای PCLZIP رخ می‌دهد.

🔍 علت ریشه‌ای: فایل زیپ به طور ناقص دانلود شده یا فرمت فشرده‌سازی آن با لایبرری Zip وردپرس ناسازگار است.

✅ راهکار رفع مشکل:

فایل زیپ را مجدداً از پنل سماویه دانلود کنید یا پوشه استخراج‌شده را از طریق FTP / File Manager هاست در wp-content/plugins آپلود کنید.

کد مشکل 10: عدم ساخته شدن گزینه‌های تنظیمات در دیتابیس (wp_options)

❌ نشانه خطا: تغییرات در صفحه تنظیمات ذخیره می‌شود اما پس از رفرش رست می‌شود.

🔍 علت ریشه‌ای: محدودیت max_input_vars در تنظیمات PHP هاست یا وجود کاراکترهای غیرمجاز در متن شعار یا آدرس.

✅ راهکار رفع مشکل:

مقدار max_input_vars را در php.ini یا .htaccess روی 5000 قرار دهید.

// افزودن به فایل .htaccess هاست
php_value max_input_vars 5000
php_value post_max_size 64M

کد مشکل 11: خطای نیاز به نصب و فعال‌سازی ووکامرس (WooCommerce Missing Notice)

❌ نشانه خطا: هشدار “برای استفاده از سمافاکتور ابتدا ووکامرس را فعال کنید” ظاهر می‌شود.

🔍 علت ریشه‌ای: افزونه ووکامرس غیرفعال است یا قبل از سمافاکتور بارگذاری نشده است.

✅ راهکار رفع مشکل:

وارد بخش افزونه‌ها شده و افزونه WooCommerce را فعال نمایید.

کد مشکل 12: نمایش علامت سوال (؟؟؟) یا کاراکترهای مربعی به جای حروف فارسی در PDF

❌ نشانه خطا: متون فارسی در خروجی PDF دانلود شده به صورت علامت سوال یا مربع سیاه دیده می‌شوند.

🔍 علت ریشه‌ای: فونت‌های فارسی (مانند Vazirmatan یا Shabnam) در کتابخانه PDF خوانی (mPDF/Dompdf) به درستی Embed نشده‌اند.

✅ راهکار رفع مشکل:

در تنظیمات سمافاکتور گزینه “تزریق فونت استاندارد Vazirmatan با پشتیبانی کامل UTF-8” را فعال کنید و مطمئن شوید ماژول mbstring روی PHP سرور فعال است.

// فعال‌سازی mbstring و UTF-8 در PHP
extension=mbstring
mbstring.internal_encoding = UTF-8

کد مشکل 13: حروف فارسی جدا از هم و معکوس (مثلاً: ر و ت ک ا ف به جای فاکتور)

❌ نشانه خطا: متن فارسی در فایل PDF از چپ به راست و حروف به صورت جدا جدا رندر می‌شوند.

🔍 علت ریشه‌ای: کتابخانه PDF ساز فاقد پردازشگر متون راست‌چین RTL (Complex Script Shaping) است.

✅ راهکار رفع مشکل:

موتور PDF ساز سمافاکتور بر پایه mPDF 8+ با الگوریتم اختصاصی Bidi/RTL بهینه‌سازی شده است. در تنظیمات افزونه گزینه “بازنویسی الگوریتم RTL” را تیک بزنید.

کد مشکل 14: خطای Fatal error: Allowed memory size of 134217728 bytes exhausted در زمان تولید PDF

❌ نشانه خطا: هنگام زدن دکمه دانلود PDF، فرایند متوقف شده و خطای اتمام حافظه صادر می‌شود.

🔍 علت ریشه‌ای: رندر کادر تذهیب با کیفیت بالا و تبدیل فونت‌ها نیاز به حداقل ۲۵۶ مگابایت رم PHP دارد.

✅ راهکار رفع مشکل:

مقدار memory_limit در php.ini یا .htaccess سرور را روی 512M یا 1024M تنظیم کنید.

// در فایل php.ini یا user.ini
memory_limit = 512M
max_execution_time = 300

کد مشکل 15: عدم نمایش تصاویر و لوگو در فایل PDF (جای خالی یا علامت x سرخ)

❌ نشانه خطا: لوگوی فروشگاه یا آیکون‌ها در نسخه وب هست اما در فایل PDF سفید یا خراب ظاهر می‌شوند.

🔍 علت ریشه‌ای: محدودیت allow_url_fopen یا عدم دسترسی cURL موتور PDF ساز برای خواندن آدرس‌های URL تصویر.

✅ راهکار رفع مشکل:

در تنظیمات هاست allow_url_fopen را On کنید یا در سمافاکتور گزینه “استفاده از مسیر فیزیکی فایل (Absolute Path) به جای URL” را فعال کنید.

// تبدیل URL تصویر به مسیر فیزیکی سرور
$logo_path = str_replace( site_url('/'), ABSPATH, $logo_url );

کد مشکل 16: دانلود نشدن خودکار PDF و باز شدن کدهای متنی عجیب (%PDF-1.4…) در مرورگر

❌ نشانه خطا: به جای دانلود فایل .pdf، متون باینری ناخوانا روی مرورگر باز می‌شوند.

🔍 علت ریشه‌ای: عدم ارسال صحیح هدرهای HTTP (Content-Type: application/pdf و Content-Disposition).

✅ راهکار رفع مشکل:

افزونه سمافاکتور هدرهای استاندارد دانلود را ارسال می‌کند. مطمئن شوید افزونه‌های کش کد متنی قبل از ارسال هدر خروجی ندهند (No whitespace before

header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="Factor-' . $order_id . '.pdf"');
header('Cache-Control: private, max-age=0, must-revalidate');

کد مشکل 17: قطع شدن انتهای جدول محصولات در مرز صفحه (Page Break Collision)

❌ نشانه خطا: در فاکتورهای با تعداد آیتم زیاد، یک سطر محصول نصفه در صفحه اول و نصفه در صفحه دوم چاپ می‌شود.

🔍 علت ریشه‌ای: عدم تنظیم ویژگی page-break-inside: avoid روی سطرهای جدول .

✅ راهکار رفع مشکل:

استایل CSS زیر به صورت خودکار در الگوی PDF سمافاکتور اعمال شده است:

tr, table, .invoice-header {
    page-break-inside: avoid !important;
}
.page-break {
    page-break-after: always;
}

کد مشکل 18: خطای SSL Certificate Problem هنگام دانلود تصاویر وب‌سایت درون PDF

❌ نشانه خطا: خطای cURL error 60: SSL certificate prblem: unable to get local issuer certificate.

🔍 علت ریشه‌ای: گواهی SSL هاست شما self-signed است یا زنجیره CA در cURL سرور به‌روز نیست.

✅ راهکار رفع مشکل:

گزینه “تایید امنیت SSL تصاویر در PDF” را در تنظیمات پیشرفته سمافاکتور خاموش کنید یا گواهی SSL معتبر اعطا کنید.

کد مشکل 19: تاری و کیفیت پایین حاشیه تذهیب و لوگو در فایل PDF

❌ نشانه خطا: تذهیب اطراف فاکتور در نمایش وب شفاف است اما در PDF پیکسل‌پیکسل و تار می‌شود.

🔍 علت ریشه‌ای: استفاده از فایل‌های PNG کم‌کیفیت به جای وکتور SVG یا با کیفیت 300 DPI.

✅ راهکار رفع مشکل:

در سمافاکتور تمامی حاشیه‌های تذهیب از فایل‌های وکتور با رزولوشن بالای چاپ بهره می‌برند. لوگوی فروشگاه را نیز با ابعاد حداقل 600×600 پیکسل آپلود کنید.

کد مشکل 20: عدم نمایش شماره صفحه (صفحه ۱ از ۲) در فاکتورهای طولانی

❌ نشانه خطا: پاپرگ فاکتور در صفحات دوم و سوم شماره صفحه ندارد.

🔍 علت ریشه‌ای: عدم تنظیم کدهای جایگزین {PAGENO} و {NBPG} در کدهای mPDF.

✅ راهکار رفع مشکل:

در ساختار موتور mPDF سمافاکتور کد زیر در فوتر درج شده است:

<htmlpagefooter name="myFooter">
    <div style="text-align: center; font-size: 9pt; color: #666;">
        صفحه {PAGENO} از {NBPG} - فاکتور رسمی فروشگاه
    </div>
</htmlpagefooter>

کد مشکل 21: خطای “mPDF error: Image type not supported” برای فرمت WebP

❌ نشانه خطا: هنگام آپلود لوگو با فرمت .webp موتور PDF ساز خطا می‌دهد.

🔍 علت ریشه‌ای: کتابخانه‌های قدیمی mPDF از فرمت WebP پشتیبانی نمی‌کنند مگر ماژول GD/ImageMagick به روز باشد.

✅ راهکار رفع مشکل:

فرمت لوگوی خود را به PNG با پس‌زمینه شفاف (Transparent) تغییر دهید تا بهترین خروجی چاپ حاصل شود.

کد مشکل 22: مشکل عدم دانلود PDF روی مرورگرهای آیفون و سافاری (Safari iOS)

❌ نشانه خطا: کاربران آیفون پس از لمس دکمه دانلود PDF با صفحه خالی یا مسدود شدن پاپ‌آپ روبرو می‌شوند.

🔍 علت ریشه‌ای: محدودیت مرورگر Safari در باز کردن پاپ‌آپ‌های ناهمگام (Async Popup Blocker).

✅ راهکار رفع مشکل:

در سمافاکتور لینک مستقیم دانلود به جای window.open استفاده می‌شود تا در iOS بدون مشکل دانلود گردد.

کد مشکل 23: چاپ شدن دکمه‌های دانلود، دکمه پرینت و منوهای سایت در برگه پرینت فاکتور

❌ نشانه خطا: وقتی دکمه Print زده می‌شود عناصر کنترلی و هدر سایت هم روی کاغذ چاپ می‌شوند.

🔍 علت ریشه‌ای: عدم اعمال درست کلاس‌های no-print در استایل‌های @media print.

✅ راهکار رفع مشکل:

افزونه تمام عناصر کنترلی را در کلاس no-print قرار داده است. دستور CSS زیر را نیز در صورت نیاز اضافه کنید:

@media print {
    .no-print, header, footer, sidebar, .admin-bar {
        display: none !important;
    }
    body {
        background: #fff !important;
        padding: 0 !important;
    }
}

کد مشکل 24: حذف شدن کادرهای تذهیب طلایی و رنگ‌های پس‌زمینه در خروجی پرینتر

❌ نشانه خطا: در پیش‌نمایش پرینت، کادر تذهیب و خطوط رنگی به صورت سفید بی‌رنگ ظاهر می‌شوند.

🔍 علت ریشه‌ای: تنظیمات مرورگر گزینه‌ی “Background Graphics” را به صورت غیرفعال نگه داشته است.

✅ راهکار رفع مشکل:

در پنجره پرینت مرورگر (Print Dialog) بخش More Settings را باز کرده و تیک گزینه Background Graphics را بزنید. همچنین در CSS دستور -webkit-print-color-adjust: exact درج شده است.

@media print {
    * {
        -webkit-print-color-adjust: exact !important;
        print-color-adjust: exact !important;
    }
}

کد مشکل 25: بهم خوردن سایز کاغذ و عدم انطباق با برگه A4 یا A5

❌ نشانه خطا: فاکتور روی برگه A4 به صورت خیلی کوچک در گوشه چاپ می‌شود یا از کادر بیرون می‌زند.

🔍 علت ریشه‌ای: تنظیم نبودن سایز کاغذ در دستور CSS @page.

✅ راهکار رفع مشکل:

در تنظیمات سمافاکتور می‌توان اندازه کاغذ را روی A4 یا A5 انتخاب کرد. دستور CSS زیر اندازه دقیق کاغذ را اجبار می‌کند:

@page {
    size: A4 portrait;
    margin: 10mm 10mm 10mm 10mm;
}

کد مشکل 26: افزوده شدن هدر و فوتر مرورگر (مانند تاریخ، لینک URL و شماره صفحه مرورگر)

❌ نشانه خطا: در بالا و پایین کاغذ چاپ‌شده آدرس سایت و تاریخ متنی مرورگر چاپ می‌شود.

🔍 علت ریشه‌ای: تنظیمات استاندارد مرورگر برای Headers and Footers.

✅ راهکار رفع مشکل:

در پنجره تنظیمات پرینت مرورگر (Chrome/Edge)، تیک گزینه “Headers and footers” را بردارید.

کد مشکل 27: ریز شدن بیش از حد متون هنگام پرینت با پرینتر حرارتی فیش پرینتر (80mm)

❌ نشانه خطا: فاکتور در دستگاه حرارتی صدور فیش بسیار ریز و ناخوانا می‌شود.

🔍 علت ریشه‌ای: استفاده از الگوی فاکتور A4 برای پرینترهای حرارتی ۸ سانتی‌متری.

✅ راهکار رفع مشکل:

در سمافاکتور الگوی اختصاصی Thermal Receipt (فیش پرینتر حرارتی) تعبیه شده است. تم را روی “فیش حرارتی” قرار دهید.

کد مشکل 28: حاشیه‌های سفید اضافی (Margins) ناخواسته دور برگه چاپ

❌ نشانه خطا: کادر تذهیب به چسبیده به حاشیه برگه نمی‌افتد و دور آن سفیدی زیاد است.

🔍 علت ریشه‌ای: تنظیمات Margin مرورگر روی Default قرار دارد.

✅ راهکار رفع مشکل:

در تنظیمات پرینت مرورگر گزینه Margins را روی None یا Minimum قرار دهید.

کد مشکل 29: افتادن تیتر جدول در یک صفحه و سطر اول محصول در صفحه بعدی

❌ نشانه خطا: تیتر جدول در انتهای برگه اول و جزییات در برگه بعدی می‌افتد.

🔍 علت ریشه‌ای: عدم تنظیم keep-with-next روی جدول.

✅ راهکار رفع مشکل:

در CSS سمافاکتور دستور thead { display: table-header-group; } درج شده که باعث می‌شود تیتر جدول در تمام صفحات تکرار شود.

thead {
    display: table-header-group;
}
tfoot {
    display: table-footer-group;
}

کد مشکل 30: عدم چاپ لوگوی شفاف PNG با پس‌زمینه مشکی یا تیره در پرینتر

❌ نشانه خطا: لوگو دارای background شفاف است اما در چاپ مشکی می‌شود.

🔍 علت ریشه‌ای: عدم پشتیبانی برخی درایورهای قدیمی پرینتر از آلفا چنل PNG.

✅ راهکار رفع مشکل:

لوگو را با پس‌زمینه سفید خالص یا فرمت JPG آپلود کنید.

کد مشکل 31: کند شدن فرایند پرینت به علت حجم بالای فونت‌های جاگذاری شده

❌ نشانه خطا: ارسال دستور پرینت به پرینتر شبکه چندین ثانیه طول می‌کشد.

🔍 علت ریشه‌ای: لود فونت‌های سنگین TTF با حجم بیش از ۳ مگابایت.

✅ راهکار رفع مشکل:

سفافاکتور از فونت‌های WOFF2 و TTF Subset بهینه‌سازی شده با حجم کمتر از ۲۰۰ کیلوبایت استفاده می‌کند.

کد مشکل 32: عدم چاپ بارکد یا QR Code سفارش در پرینترهای قدیمی

❌ نشانه خطا: QR کد استعلام فاکتور به صورت یک مربع توپر یا خالی چاپ می‌شود.

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

✅ راهکار رفع مشکل:

کد QR در سمافاکتور با کنتراست مشکی خالص و سایز استاندارد رندر می‌شود تا حتی با اسکنرهای قدیمی قابل خوانش باشد.

کد مشکل 33: بهم ریختگی حروف فارسی به صورت کاراکترهای ناشناخته (??? / ÅØ) در اکسل

❌ نشانه خطا: فایل CSV خروجی وقتی در نرم‌افزار Microsoft Excel باز می‌شود متون فارسی ناخوانا هستند.

🔍 علت ریشه‌ای: عدم وجود علامت UTF-8 BOM (Byte Order Mark) در ابتدای فایل CSV.

✅ راهکار رفع مشکل:

سمافاکتور به صورت خودکار کاراکترهای \xEF\xBB\xBF را در ابتدای خروجی CSV درج می‌کند تا اکسل آن را فوراً با کدگذاری UTF-8 شناسایی کند.

// افزودن UTF-8 BOM جهت شناسایی زبان فارسی در Microsoft Excel
$bom = "";
file_put_contents('invoices.csv', $bom . $csv_content);

کد مشکل 34: قرار گرفتن تمام ستون‌های خروجی CSV در یک ستون اکسل (عدم تفکیک ستون‌ها)

❌ نشانه خطا: همه اطلاعات مانند نام، شماره سفارش و قیمت در اولین ستون (Column A) اکسل چسبیده به هم دیده می‌شوند.

🔍 علت ریشه‌ای: تنظیمات جداکننده (Delimiter) اکسل سیستم شما روی نقطه-ویرگول (;) یا کاما (,) متفاوت است.

✅ راهکار رفع مشکل:

در تنظیمات خروجی اکسل سمافاکتور می‌توان جداکننده را بین کاما (,) یا نقطه-ویرگول (;) انتخاب نمود یا از خروجی واقعی XLSX استفاده کرد.

کد مشکل 35: حذف صفر اول شماره موبایل خریداران (مثلاً تبدیل 09123456789 به 9123456789)

❌ نشانه خطا: در خروجی اکسل شماره تماس مشتریان صفر ابتدایی را از دست می‌دهد.

🔍 علت ریشه‌ای: اکسل به طور پیش‌فرض ستون شماره تلفن را به عنوان عدد (Numeric) تشخیص داده و صفر قبل را حذف می‌کند.

✅ راهکار رفع مشکل:

سمافاکتور شماره تماس را با فرمت متنی (Text Quote) فرمت‌دهی می‌کند تا صفر اول حفظ شود.

// فورس کردن فرمت متنی در اکسل جهت حفظ صفر اول
$phone_formatted = '="' . $phone_number . '"';

کد مشکل 36: تبدیل شدن شماره‌های طولانی تراکنش به فرمت علمی (مثلاً 1.2345E+11) در اکسل

❌ نشانه خطا: کد پیگیری بانک به صورت اعداد اعشاری نماد علمی دیده می‌شود.

🔍 علت ریشه‌ای: بزرگ بودن اعداد از ۱۱ رقم و تشخیص اتوماتیک علمی توسط Microsoft Excel.

✅ راهکار رفع مشکل:

با استفاده از فرمت-دهی متنی (پیشوند =”شماره”) اعداد به صورت رشته کاراکتری دقیق بدون فرمت علمی ذخیره می‌شوند.

کد مشکل 37: خطای Memory Limit هنگام خروجی گرفتن از بیش از ۵۰۰۰ سفارش همزمان

❌ نشانه خطا: هنگام گرفتن خروجی گزارش کلی فاکتورها، سیستم تایم‌اوت شده یا ۵۰۰ می‌دهد.

🔍 علت ریشه‌ای: لود کردن تمام سفارشات در حافظه RAM سرور به صورت یکجا.

✅ راهکار رفع مشکل:

سمافاکتور از پردازش دسته‌ای (Batch Processing / Streaming) با خروجی خرد خرد در حافظه موقت php://output بهره می‌برد.

$output = fopen('php://output', 'w');
// خروجی دادن خط به خط بدون اشغال رم سرور
foreach ($orders_chunk as $order) {
    fputcsv($output, $order_data);
}

کد مشکل 38: عدم نمایش متغیرهای سفارشی محصول و ویژگی‌ها در فایل اکسل

❌ نشانه خطا: رنگ، سایز یا ویژگی‌های انتخابی محصول در فایل گزارش اکسل خالی است.

🔍 علت ریشه‌ای: عدم استخراج متادیتاهای item_meta ووکامرس.

✅ راهکار رفع مشکل:

سمافاکتور تمامی متاداده‌های ووکامرس (wc_get_order_item_meta) را به صورت کامل پردازش و در ستون “ویژگی‌های محصول” درج می‌نماید.

کد مشکل 39: عدم تطابق تاریخ شمسی خریدهای قبلی در خروجی CSV

❌ نشانه خطا: تاریخ‌ها به صورت میلادی (2024-05-12) ذخیره می‌شوند یا در اکسل اشتباه محاسبه می‌شوند.

🔍 علت ریشه‌ای: عدم فراخوانی توابع تبدیل تاریخ Jalali/JDF.

✅ راهکار رفع مشکل:

در تنظیمات خروجی اکسل می‌توانید فرمت تاریخ را روی “شمسی (۱۴۰۳/۰۵/۰۲)” یا “میلادی” تنظیم کنید.

کد مشکل 40: عدم دانلود فایل CSV و دانلود یک فایل index.html یا 0 بایت

❌ نشانه خطا: دکمه خروجی اکسل کلیک می‌شود اما فایلی با حجم صفر یا صفحه HTML خطا دانلود می‌شود.

🔍 علت ریشه‌ای: ارسال هشدار PHP (Notice/Warning) قبل از کدهای خروجی فایل CSV.

✅ راهکار رفع مشکل:

پاکسازی بافر خروجی با ob_clean() و ob_end_clean() قبل از ارسال هدرهای فایل CSV.

if (ob_get_length()) {
    ob_end_clean();
}
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=invoices-export.csv');

کد مشکل 41: عدم محاسبه درست مجموع کل درآمد و مالیات در فرمول‌های ریاضی اکسل

❌ نشانه خطا: وقتی در اکسل روی ستون قیمت فرمول SUM می‌زنید مقدار صفر حاصل می‌شود.

🔍 علت ریشه‌ای: وجود کاراکترهای ویرگول جداکننده هزارگان (،) یا کلمه “تومان” داخل سلول عددی.

✅ راهکار رفع مشکل:

در تنظیمات خروجی اکسل گزینه “خروجی اعداد خام بدون واحد پولی” را تیک بزنید تا اعداد کاملاً محاسباتی باشند.

کد مشکل 42: عدم امکان باز کردن همزمان فایل CSV خروجی در چند سیستم شبکه

❌ نشانه خطا: خطای “File is locked by another user” در نرم‌افزار اکسل.

🔍 علت ریشه‌ای: قفل فایل توسط اکسل در سیستم اول.

✅ راهکار رفع مشکل:

پیشنهاد می‌شود فایل خروجی را ابتدا ذخیره (Save As) کرده و با فرمت standard .xlsx نگه دارید.

کد مشکل 43: عدم نمایش لوگوی آپلود شده فروشگاه در بالای فاکتور تذهیب

❌ نشانه خطا: تصویر لوگو در صفحه تنظیمات مشخص شده اما در فاکتور نشان داده نمی‌شود.

🔍 علت ریشه‌ای: آدرس لوگو با HTTP است در حالی که سایت رو HTTPS قرار دارد (Mixed Content) یا مسیر تصویر اشتباه است.

✅ راهکار رفع مشکل:

لوگو را مجدداً از طریق رسانه‌های وردپرس آپلود کرده و آدرس HTTPS آن را مطمئن شوید.

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

❌ نشانه خطا: کادر طلایی تذهیب دور فاکتور کشیده یا قطع می‌شود.

🔍 علت ریشه‌ای: استفاده از CSS border-image غیر استاندارد یا عدم تنظیم صحیح responsive container.

✅ راهکار رفع مشکل:

کادرهای تذهیب سمافاکتور با هندسه دقیق SVG و الگوریتم border-image-slice 30 fill رندر می‌شوند تا در هر سایزی متناسب باقی بمانند.

.tazhib-box {
    border-style: solid;
    border-width: 28px;
    border-image: url('assets/images/tazhib-frame-gold.svg') 60 repeat;
}

کد مشکل 45: عدم تبدیل اعداد انگلیسی به فارسی (مثلاً نمایش 125000 به جای ۱۲۵,۰۰۰)

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

🔍 علت ریشه‌ای: غیرفعال بودن گزینه “فارسی‌سازی خودکار اعداد” در تنظیمات سمافاکتور.

✅ راهکار رفع مشکل:

وارد تنظیمات شوید و گزینه‌ی “تبدیل تمام ارقام به اعداد فارسی” را فعال نمایید.

function toPersianNum($num) {
    $en = array('0','1','2','3','4','5','6','7','8','9');
    $fa = array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹');
    return str_replace($en, $fa, $num);
}

کد مشکل 46: اعمال نشدن تغییر رنگ تم تذهیب (مثلاً سوئیچ از طلایی به فیروزه‌ای یا زمردی)

❌ نشانه خطا: تم را روی فیروزه‌ای قرار می‌دهید اما فاکتور همچنان طلایی نمایش داده می‌شود.

🔍 علت ریشه‌ای: کش شدن فایل CSS در مرورگر یا افزونه کش سایت (LiteSpeed / WP Rocket).

✅ راهکار رفع مشکل:

کش مرورگر را با Ctrl + F5 خالی کنید یا کش افزونه را پاک کنید. سمافاکتور نسخه فایل CSS را متغیر درج می‌کند تا کش نشود.

کد مشکل 47: عدم نمایش صحیح فونت‌های سفارشی (مانند ایران‌یکان، کلمه یا وزیرمتن)

❌ نشانه خطا: فاکتور با فونت عمومی سیستم (Arial یا Tahoma) نشان داده می‌شود.

🔍 علت ریشه‌ای: مسدود شدن آدرس CDN فونت یا عدم بارگذاری صحیح فایل‌های WOFF2 فونت در هاست.

✅ راهکار رفع مشکل:

سمافاکتور تمامی فونت‌های استاندارد فارسی را به صورت محلی (Local Assets) بدون نیاز به اینترنت خارجی داخل افزونه جای‌گذاری نموده است.

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

❌ نشانه خطا: در عنوان‌های طولانی متون روی یکدیگر می‌افتند.

🔍 علت ریشه‌ای: استفاده از height ثابت به جای min-height در استایل‌های CSS.

✅ راهکار رفع مشکل:

کلاس‌های CSS سمافاکتور با Flexbox و Grid استاندارد طراحی شده و بدون ارتفاع ثابت تغییر سایز می‌دهند.

کد مشکل 49: عدم نمایش مهر و امضای دیجیتال فروشگاه در انتهای فاکتور

❌ نشانه خطا: تصویر مهر فروشگاه در کادر انتهای فاکتور نشان داده نمی‌شود.

🔍 علت ریشه‌ای: عدم آپلود تصویر مهر یا فعال نبودن تیک “نمایش مهر و امضای فروشگاه”.

✅ راهکار رفع مشکل:

از پیشخوان وردپرس > سمافاکتور > بخش تصویر مهر و امضا، فایل شفاف PNG مهر خود را آپلود و تیک نمایش را فعال کنید.

کد مشکل 50: شکسته شدن خطوط آدرس‌های طولانی مشتری و بیرون زدن از جدول

❌ نشانه خطا: آدرس‌های طولانی از کادر جدول فاکتور خارج می‌شوند.

🔍 علت ریشه‌ای: عدم وجود دستور word-break: break-word در استایل جدول.

✅ راهکار رفع مشکل:

دستور CSS زیر در الگوی فاکتور تعبیه شده است:

.customer-address, .item-name {
    word-wrap: break-word;
    word-break: break-word;
    white-space: normal;
}

کد مشکل 51: عدم نمایش کد پستی و شماره ملی مشتری در بخش اطلاعات خریدار

❌ نشانه خطا: فیلد کدپستی یا کد ملی در فاکتور نشان داده نمی‌شود.

🔍 علت ریشه‌ای: مشتری فیلد را در برگه تسویه حساب پر نکرده یا نام فیلد سفارشی در تنظیمات افزونه ست نشده است.

✅ راهکار رفع مشکل:

در تنظیمات سمافاکتور می‌توان کلید فیلد سفارشی کد ملی (مثلاً billing_national_code) را جهت استخراج خودکار وارد نمود.

کد مشکل 52: مشکل نمایش رنگ‌های گرادینت تذهیب در مانیتورهای قدیمی با پنل TN

❌ نشانه خطا: گرادینت‌های طلایی و فیروزه‌ای به صورت پله‌پله (Banding) دیده می‌شوند.

🔍 علت ریشه‌ای: عمق رنگ پایین نمایشگرهای قدیمی.

✅ راهکار رفع مشکل:

رنگ‌های گرادینت سمافاکتور با Dithering بهینه‌سازی شده‌اند تا روی تمامی نمایشگرها یکنواخت به نظر برسند.

کد مشکل 53: پیام “کلید لایسنس معتبر نیست” یا “دامنه فعال‌سازی شده مطابقت ندارد”

❌ نشانه خطا: هنگام وارد کردن کد لایسنس خریده شده از samavie.ir پیام نامعتبر بودن صادر می‌شود.

🔍 علت ریشه‌ای: اشتباه در تایپ کاراکترها، وجود فاصله اضافی (Space) در ابتدا یا انتهای کد، یا عدم مطابقت دامنه ثبت‌شده در پنل.

✅ راهکار رفع مشکل:

کد لایسنس را بدون فاصله کپی کنید. مطمئن شوید دامنه سایت شما (با www یا بدون www) دقیقا مطابق با دامنه ثبت شده در پنل کاربری سماویه باشد.

کد مشکل 54: خطای cURL error 60: SSL certificate problem هنگام استعلام لایسنس از سرور سماویه

❌ نشانه خطا: بررسی لایسنس با خطای عدم امکان ارتباط با سرور سامانه لایسنس روبرو می‌شود.

🔍 علت ریشه‌ای: قدیمی بودن بسته cacert.pem در نسخه PHP سرور شما.

✅ راهکار رفع مشکل:

فایل گواهی SSL سرور خود را بروز کنید یا با پشتیبانی هاست تماس بگیرید تا بسته ca-certificates را آپدیت کنند.

کد مشکل 55: عدم دریافت خودکار اعلامیه بروزرسانی‌های جدید در پیشخوان وردپرس

❌ نشانه خطا: نسخه جدید افزونه در سایت samavie.ir منتشر شده اما در پیشخوان آپدیت نشان داده نمی‌شود.

🔍 علت ریشه‌ای: کش شدن پاسخ‌های سیستم آپدیت وردپرس (Transient Cache).

✅ راهکار رفع مشکل:

از مسیر پیشخوان > بروزرسانی‌ها روی دکمه “بررسی مجدد” کلیک کنید تا کش آپدیت‌های وردپرس خالی شود.

کد مشکل 56: غیرفعال شدن ناگهانی لایسنس پس از تغییر دامنه یا انتقال سایت به هاست جدید

❌ نشانه خطا: پس از جابجایی سایت لایسنس غیرفعال شده و پیغام لایسنس منقضی شده صادر می‌شود.

🔍 علت ریشه‌ای: تغییر آدرس IP یا نام دامنه اصلی سایت.

✅ راهکار رفع مشکل:

وارد پنل کاربری خود در samavie.ir شوید و از بخش مدیریت لایسنس‌ها دکمه “تغییر دامنه” را بزنید تا دامنه جدید ثبت گردد.

کد مشکل 57: خطای Timeout (ارتباط قطعی) هنگام اتصال به سرور لایسنس سماویه

❌ نشانه خطا: ثبت لایسنس بیش از ۳۰ ثانیه معطل شده و خطای Connection Timed Out صادر می‌شود.

🔍 علت ریشه‌ای: مسدود بودن پورت‌های خروجی HTTP/HTTPS یا دیوار آتش (Firewall) سرور هاست شما.

✅ راهکار رفع مشکل:

از مدیر هاست بخواهید دسترسی آدرس api.samavie.ir روی پورت‌های 80 و 443 را در فایروال (CSF/iptables) باز بگذارد.

کد مشکل 58: پیام “حداکثر تعداد دامنه‌های مجاز برای این لایسنس تکمیل شده است”

❌ نشانه خطا: امکان فعال‌سازی روی سایت دوم وجود ندارد.

🔍 علت ریشه‌ای: لایسنس تک‌دامنه‌ای خریداری شده و قبلا روی یک دامنه فعال گردیده است.

✅ راهکار رفع مشکل:

برای سایت جدید لایسنس جدید یا لایسنس چنددامنه‌ای از samavie.ir تهیه فرمایید.

کد مشکل 59: تداخل لایسنس در محیط‌های لوکال‌هست (Localhost / XAMPP / Laragon)

❌ نشانه خطا: لایسنس روی سیستم شخصی و لوکال فعال نمی‌شود.

🔍 علت ریشه‌ای: عدم دسترسی لوکال‌هست به اینترنت یا نام دامنه غیر استاندارد.

✅ راهکار رفع مشکل:

سمافاکتور به طور خودکار دامنه‌های localhost, 127.0.0.1 و test.local را جهت توسعه و تست آزاد می‌گذارد و نیازی به کسر سهمیه لایسنس ندارد.

کد مشکل 60: عدم شناسایی زیردامنه‌ها (Subdomains) در لایسنس دامنه اصلی

❌ نشانه خطا: سایت روی sub.domain.com است اما لایسنس domain.com را نمی‌پذیرد.

🔍 علت ریشه‌ای: تفاوت ساختاری دامنه اصلی و ساب‌دامنه در سامانه اعتبارسنجی.

✅ راهکار رفع مشکل:

ساب‌دامنه‌های تست (مانند dev., staging., test.) به صورت رایگان پشتیبانی می‌شوند. برای ساب‌دامنه‌های تجاری مجزا به پشتیبانی تیکت بزنید.

کد مشکل 61: پاک شدن تنظیمات سفارشی فاکتور پس از بروزرسانی افزونه

❌ نشانه خطا: پس از زدن دکمه آپدیت، تنظیمات تم و لوگوی شما رست شده است.

🔍 علت ریشه‌ای: ذخیره‌سازی غیر استاندارد تنظیمات در پوشه افزونه به جای جدول wp_options.

✅ راهکار رفع مشکل:

سمافاکتور تمام تنظیمات را در جدول استاندار دیتابیس (wp_options) نگه می‌دارد و بروزرسانی هیچ نقشی در پاکسازی آن ندارد.

کد مشکل 62: خطای 403 Forbidden هنگام فراخوانی لایسنس از طریق REST API

❌ نشانه خطا: خطای عدم دسترسی در کنسول مرورگر هنگام ذخیره لایسنس.

🔍 علت ریشه‌ای: مسدود بودن REST API وردپرس توسط افزونه‌های امنیتی مانند iThemes Security یا Wordfence.

✅ راهکار رفع مشکل:

در تنظیمات افزونه امنیتی استثنا برای مسیر `/wp-json/samafactor/v1/` لحاظ فرمایید.

کد مشکل 63: عدم سازگاری با ذخیره‌سازی بالای ووکامرس (WooCommerce HPOS / High-Performance Order Storage)

❌ نشانه خطا: هنگام فعال بودن HPOS ووکامرس، فاکتورها لود نشده یا اطلاعات سفارشات سفارشی نشان داده نمیشوند.

🔍 علت ریشه‌ای: استفاده از توابع قدیمی get_post_meta به جای $order->get_meta() در سفارشات ووکامرس 8+.

✅ راهکار رفع مشکل:

سمافاکتور کاملاً با HPOS (جداول اختصاصی wc_orders) سازگار بوده و اعلان اعلام آمادگی declare_compatibility را دارد.

add_action( 'before_woocommerce_init', function() {
    if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
    }
} );

کد مشکل 64: تداخل با افزونه‌های چندزبانه WPML و Polylang در ترجمه متون فاکتور

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

🔍 علت ریشه‌ای: عدم استفاده از توابع ترجمه استاندارد __() و e_() و عدم درج فایل‌های po/mo.

✅ راهکار رفع مشکل:

سمافاکتور از فایل‌های ترجمه .pot پشتیبانی کرده و با WPML/Polylang به صورت ۱۰۰٪ بومی‌سازی شده کار می‌کند.

کد مشکل 65: تداخل با افزونه‌های کش و بهینه‌سازی (WP Rocket, LiteSpeed Cache, Autoptimize)

❌ نشانه خطا: تغییرات فاکتور نشان داده نمی‌شود یا لینک دانلود PDF برای همه کاربران یکسان می‌شود.

🔍 علت ریشه‌ای: کش شدن صفحات دینامیک فاکتور یا مینیفای شدن اشتباه اسکریپت‌های PDF.

✅ راهکار رفع مشکل:

مسیر فاکتورهای آنلاین را در بخش “استثناهای کش” (Excluded URLs) افزونه کش خود وارد کنید.

// آدرس‌های مستثنی شده از کش در راکت یا لایت‌اسپید:
/checkout/order-received/*
/*samafactor_download_pdf=*

کد مشکل 66: عدم ارسال یا پیوست شدن لینک فاکتور در ایمیل‌های خودکار ووکامرس

❌ نشانه خطا: در ایمیل “تکمیل سفارش” دکمه مشاهده فاکتور آنلاین یا لینک PDF وجود ندارد.

🔍 علت ریشه‌ای: غیرفعال بودن هوک‌های پیوست ایمیل ووکامرس.

✅ راهکار رفع مشکل:

در تنظیمات سمافاکتور گزینه‌ی “افزودن دکمه دانلود فاکتور به ایمیل‌های مشتریان ووکامرس” را تیک بزنید.

کد مشکل 67: تداخل با صفحه ساز المنتور (Elementor) هنگام ویرایش برگه تسویه حساب

❌ نشانه خطا: هنگام ویرایش برگه خرید با المنتور، باکس فاکتور ارور المنتور صادر می‌کند.

🔍 علت ریشه‌ای: عدم بررسی حالت ایجکس یا ویرایشگر المنتور is_elementor_active().

✅ راهکار رفع مشکل:

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

کد مشکل 68: عدم نمایش فیلدهای سفارشی افزوده‌شده توسط Checkout Field Editor

❌ نشانه خطا: فیلدهایی مثل “زمان تحویل” یا “کد اقتصادی” در فاکتور چاپ نمی‌شوند.

🔍 علت ریشه‌ای: عدم فراخوانی متاداده‌های سفارشی سفارش.

✅ راهکار رفع مشکل:

در تنظیمات سمافاکتور می‌توانید فیلدهای سفارشی صورتحساب را به صورت نام نام‌کلاس (Meta Keys) اضافه کنید تا در فاکتور رندر شوند.

کد مشکل 69: عدم کارکرد در شبکه وردپرس چندسایته (WordPress Multisite)

❌ نشانه خطا: افزونه در سایت‌های زیرمجموعه چندسایته فعال می‌شود اما دیتابیس جداگانه نمی‌سازد.

🔍 علت ریشه‌ای: عدم پشتیبانی از اکشن switch_to_blog().

✅ راهکار رفع مشکل:

سمافاکتور کاملاً با شبکه چندسایته وردپرس (Multisite Network) سازگار است.

کد مشکل 70: تداخل با افزونه‌های پنل کاربری خریدار (مثل دیجیتس یا پنل‌های پیشرفته)

❌ نشانه خطا: دکمه فاکتور در صفحه “حساب کاربری من > سفارش‌ها” ظاهر نمی‌شود.

🔍 علت ریشه‌ای: بازنویسی الگوی my-orders.php توسط افزونه‌های پنل کاربری.

✅ راهکار رفع مشکل:

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

کد مشکل 71: عدم نمایش تخفیف‌های گروهی و افزونه‌های قیمت‌گذاری پویا (Dynamic Pricing)

❌ نشانه خطا: مبلغ تخفیف در فاکتور با مبلغ کسرشده در سبد خرید متفاوت است.

🔍 علت ریشه‌ای: استفاده از قیمت پایه کالا به جای $order->get_discount_total().

✅ راهکار رفع مشکل:

سمافاکتور تمام محاسبات مالی را مستقیماً از متاداده‌های نهایی ثبت‌شده سفارش ووکامرس می‌خواند تا دقیق‌ترین اعداد نمایش داده شود.

کد مشکل 72: تداخل با افزونه‌های امنیتی (Wordfence / iThemes Security) و مسدود شدن AJAX

❌ نشانه خطا: هنگام زدن دکمه دانلود PDF خطای Forbidden یا 403 صادر می‌شود.

🔍 علت ریشه‌ای: شناسایی نونس (Nonce) یا پارامترهای درخواست به عنوان حمله CSRF.

✅ راهکار رفع مشکل:

استثنا کردن اکشن‌های `samafactor_download_pdf` در تنظیمات WAF افزونه امنیتی.

کد مشکل 73: کندی شدید در هنگام صدور همزمان ده‌ها فاکتور PDF

❌ نشانه خطا: چاپ یا دانلود گروهی فاکتورها سرور را معطل می‌کند.

🔍 علت ریشه‌ای: پردازش سنگین رندر کردن موتور HTML to PDF به صورت همزمان روی یک Thread.

✅ راهکار رفع مشکل:

استفاده از قابلیت صف‌بندی (Queue) یا تولید فایل‌های موقت کش شده با پسوند .pdf.

کد مشکل 74: خطای Maximum Execution Time Exceeded (30 seconds) در زمان خروجی گرفتن

❌ نشانه خطا: سرور پس از ۳۰ ثانیه معطلی پیغام زمان مجاز به پایان رسید صادر می‌کند.

🔍 علت ریشه‌ای: محدودیت max_execution_time در php.ini سرور.

✅ راهکار رفع مشکل:

افزایش زمان اجرای اسکریپت‌ها در فایل .htaccess یا php.ini:

// افزایش زمان اجرای اسکریپت PHP به ۳۰۰ ثانیه
set_time_limit(300);
ini_set('max_execution_time', 300);

کد مشکل 75: پر شدن حجم دایرکتوری uploads سرور به دلیل فایل‌های موقت PDF

❌ نشانه خطا: فضای هاست شما بدون دلیل مشخصی پر می‌شود.

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

✅ راهکار رفع مشکل:

سمافاکتور یک کرون جاب (WP-Cron) اختصاصی دارد که فایل‌های PDF موقت مسن‌تر از ۲۴ ساعت را به طور اتوماتیک حذف می‌نماید.

// پاکسازی خودکار فایل‌های موقت توسط سمافاکتور
if ( ! wp_next_scheduled( 'samafactor_daily_cleanup' ) ) {
    wp_schedule_event( time(), 'daily', 'samafactor_daily_cleanup' );
}

کد مشکل 76: کندی کوئری‌های دیتابیس در سایت‌های با بیش از ۵۰ هزار سفارش

❌ نشانه خطا: جستجوی شماره فاکتور در مدیریت وردپرس بسیار کند صورت می‌گیرد.

🔍 علت ریشه‌ای: عدم وجود ایندکس (Index) روی کلیدهای متادیتای سفارشات.

✅ راهکار رفع مشکل:

استفاده از قابلیت HPOS ووکامرس یا ایجاد ایندکس اختصاصی دیتابیس برای کلیدهای فاکتور.

کد مشکل 77: افزایش ناگهانی مصرف CPU و RAM سرور هنگام دانلود فاکتور

❌ نشانه خطا: هشدار مصرف بالای منابع از طرف شرکت هاستینگ صادر می‌شود.

🔍 علت ریشه‌ای: رندر چندباره فونت‌های سنگین TTF در هر درخواست دانلود.

✅ راهکار رفع مشکل:

فعال‌سازی سیستم کش فونت (Font Cache) در تنظیمات موتور PDF سمافاکتور.

کد مشکل 78: کند شدن دکمه ثبت سفارش در برگه تسویه حساب ووکامرس

❌ نشانه خطا: مشتریان هنگام زدن دکمه “ثبت سفارش” چند ثانیه اضافه منتظر می‌مانند.

🔍 علت ریشه‌ای: تولید همزمان فایل PDF فاکتور در لحظه ثبت سفارش به جای تولید در زمان درخواست دانلود.

✅ راهکار رفع مشکل:

سمافاکتور تولید PDF را به صورت Lazy (فقط در زمان کلیک روی دکمه دانلود) انجام می‌دهد تا فرایند خرید مشتری حتی ۱ میلی‌ثانیه کند نشود.

کد مشکل 79: خطای Too Many Database Connections هنگام چاپ دسته‌جمعی

❌ نشانه خطا: دیتابیس با خطای عدم پذیرش اتصال جدید متوقف می‌شود.

🔍 علت ریشه‌ای: باز ماندن اتصال‌های دیتابیس در حلقه فورایچ.

✅ راهکار رفع مشکل:

بستن اتصالات غیرضروری و استفاده از توابع بهینه‌سازی شده $wpdb.

کد مشکل 80: تداخل اسکریپت‌های سنگین جاوااسکریپت در برگه فاکتور

❌ نشانه خطا: صفحه فاکتور دیر لود می‌شود یا انیمیشن‌ها لگ دارند.

🔍 علت ریشه‌ای: بارگذاری اسکریپت‌های سنگین سایر افزونه‌ها در برگه فاکتور.

✅ راهکار رفع مشکل:

سمافاکتور تمام اسکریپت‌های اضافی سایر افزونه‌ها را در صفحه اختصاصی فاکتور Unhook می‌کند تا حداکثر سرعت حاصل شود.

کد مشکل 81: عدم پشتیبانی از Redis / Memcached برای کش کردن الگوهای فاکتور

❌ نشانه خطا: عدم افزایش سرعت با وجود داشتن سرور قدرتمند Redis.

🔍 علت ریشه‌ای: عدم استفاده از توابع wp_cache_get و wp_cache_set.

✅ راهکار رفع مشکل:

سمافاکتور الگوهای رندر شده را در سیستم Object Cache وردپرس ذخیره می‌کند.

کد مشکل 82: عدم پاکسازی خودکار فایل‌های کش شده فاکتور پس از ویرایش سفارش

❌ نشانه خطا: سفارش ویرایش شده اما فاکتور قدیمی را نشان می‌دهد.

🔍 علت ریشه‌ای: کش شدن فایل PDF قدیمی روی سرور.

✅ راهکار رفع مشکل:

با تغییر وضعیت سفارش یا ویرایش آن در پیشخوان، کش فایل PDF مربوطه فوراً توسط سمافاکتور پاکسازی می‌گردد.

کد مشکل 83: خطای HTTP 500 Internal Server Error هنگام باز کردن فاکتور

❌ نشانه خطا: صفحه فاکتور با پیغام ۵۰۰ خطای داخلی سرور روبرو می‌شود.

🔍 علت ریشه‌ای: معمولاً به دلیل خطای سنتکس، کمبود حافظه PHP یا عدم وجود یک کتابخانه سروری.

✅ راهکار رفع مشکل:

فایل error_log هاست را بررسی کنید. معمولاً با افزایش memory_limit یا فعال کردن ماژول mbstring برطرف می‌گردد.

کد مشکل 84: خطای HTTP 504 Gateway Timeout در سرورهای Nginx / LiteSpeed

❌ نشانه خطا: پس از دئ دقیقه معطلی مرورگر ارور 504 Gateway Timeout می‌دهد.

🔍 علت ریشه‌ای: پاسخ ندادن PHP-FPM به وب سرور Nginx در زمان مقرر.

✅ راهکار رفع مشکل:

مقدار max_execution_time و request_terminate_timeout را در تنظیمات PHP-FPM افزایش دهید.

// در فایل کانفیگ Nginx (nginx.conf)
fastcgi_read_timeout 300;
proxy_read_timeout 300;

کد مشکل 85: پیام “Warning: Cannot modify header information – headers already sent”

❌ نشانه خطا: در بالای صفحه فاکتور هشدارهای PHP چاپ شده و فایل دانلود نمی‌شود.

🔍 علت ریشه‌ای: وجود فاصله خالی (Whitespace) یا کدهای echo در فایل functions.php یا افزونه‌های دیگر قبل از ارسال هدرهای HTTP.

✅ راهکار رفع مشکل:

حالت display_errors را خاموش کنید و مطمئن شوید فایل‌های PHP بدون فاصله در ابتدا و انتها ذخیره شده‌اند.

کد مشکل 86: خطای “Call to undefined function gd_info()” یا نبود ماژول GD Library

❌ نشانه خطا: هنگام پردازش تصاویر تذهیب و لوگو خطای عدم وجود تابع GD صادر می‌شود.

🔍 علت ریشه‌ای: غیرفعال بودن ماژول پردازش تصویر php-gd روی سرور هاست.

✅ راهکار رفع مشکل:

از پیشخوان cPanel بخش Select PHP Extensions تیک گزینه gd یا imagick را فعال کنید.

کد مشکل 87: خطای “Uncaught Error: Class WooCommerce not found”

❌ نشانه خطا: فراخوانی توابع ووکامرس با خطا روبرو می‌شود.

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

✅ راهکار رفع مشکل:

کدها باید داخل هوک `plugins_loaded` یا `woocommerce_loaded` اجرا شوند.

کد مشکل 88: خطای “JSON.parse: unexpected character at line 1 column 1” در ایجکس

❌ نشانه خطا: پاسخ ایجکس با خطای JSON روبرو می‌شود.

🔍 علت ریشه‌ای: ارسال هشدارهای PHP ناخواسته همراه با پاسخ JSON.

✅ راهکار رفع مشکل:

استفاده از wp_send_json_success() و wp_send_json_error() در کدهای PHP جهت ارسال پاسخ تمیز.

کد مشکل 89: خطای “404 Not Found” هنگام کلیک روی لینک عمومی فاکتور

❌ نشانه خطا: لینک مشاهده آنلاین فاکتور ارور ۴۰۴ صفحه پیدا نشد می‌دهد.

🔍 علت ریشه‌ای: عدم بازسازی پیوندهای یکتا (Permalink Structure) پس از نصب افزونه.

✅ راهکار رفع مشکل:

وارد پیشخوان وردپرس > تنظیمات > پیوندهای یکتا شوید و بدون تغییر دادن هیچ گزینه‌ای فقط روی دکمه “ذخیره تغییرات” کلیک کنید تا رورایت‌رول‌ها بازسازی شوند.

کد مشکل 90: خطای “CSRF / Nonce verification failed” هنگام ذخیره تنظیمات

❌ نشانه خطا: پیام “نشست شما منقضی شده است دوباره تلاش کنید” صادر می‌شود.

🔍 علت ریشه‌ای: منقضی شدن کد امنیتی wp_nonce به علت باز ماندن طولانی صفحه.

✅ راهکار رفع مشکل:

صفحه را رفرش کرده و مجدداً اقدام به ذخیره‌سازی نمایید.

کد مشکل 91: خطای “DOMDocument::loadHTML(): Opening and ending tag mismatch”

❌ نشانه خطا: هشدارهای متوالی مربوط به DOMDocument در لاگ‌های دیباگ.

🔍 علت ریشه‌ای: وجود بسته‌نشدن کدهای HTML یا کاراکترهای غیر مجاز در متون توضیحات محصول.

✅ راهکار رفع مشکل:

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

کد مشکل 92: خطای “Permission Denied” در دسترسی به پوشه /wp-content/uploads/samafactor/

❌ نشانه خطا: عدم امکان ذخیره‌سازی فایل‌های PDF در پوشه اپلودها.

🔍 علت ریشه‌ای: تنظیم نبودن سطح دسترسی پوشه (File Permissions) روی 755 یا owner نادرست.

✅ راهکار رفع مشکل:

سطح دسترسی پوشه samafactor در uploads را روی 755 و فایل‌ها را روی 644 قرار دهید.

کد مشکل 93: نحوه تست افزونه در محیط Staging قبل از اعمال روی سایت اصلی

❌ نشانه خطا: نگرانی از بروز تداخل روی سایت زنده و خریداران واقعی.

🔍 علت ریشه‌ای: تغییر مستقیم کدهای سایت اصلی زنده بدون تست اولیه.

✅ راهکار رفع مشکل:

همواره یک نسخه Staging با افزونه‌هایی نظیر WP Staging ایجاد کرده و ابتدا آپدیت را آنجا تست نمایید. سمافاکتور لایسنس استیجینگ را رایگان محسوب می‌کند.

کد مشکل 94: ایمن‌سازی دایرکتوری ذخیره فاکتورها در برابر دسترسی مستقیم گوگل و هکرها

❌ نشانه خطا: خطر ایندکس شدن فاکتورهای حاوی آدرس و شماره مشتریان در گوگل.

🔍 علت ریشه‌ای: باز بودن دایرکتوری‌ها بدون فایل .htaccess محافظ.

✅ راهکار رفع مشکل:

سمافاکتور فایل‌های .htaccess و index.php خالی را در تمامی پوشه‌های ذخیره‌سازی قرار می‌دهد تا دسترسی مستقیم مسدود باشد.

# محافظت از فایل‌های فاکتور در پوشه uploads
<Files *.pdf>
    Order Deny,Allow
    Deny from all
</Files>

کد مشکل 95: روش صحیح بکاپ‌گیری از تنظیمات و الگوی فاکتور قبل از بروزرسانی

❌ نشانه خطا: خطر از دست رفتن شخصی‌سازی‌های انجام شده.

🔍 علت ریشه‌ای: عدم تهیه خروجی تنظیمات (Export Settings).

✅ راهکار رفع مشکل:

از بخش تنظیمات سمافاکتور > پشتیبان‌گیری، روی دکمه “دریافت خروجی JSON تنظیمات” کلیک کنید تا در صورت نیاز به راحتی بازگردانی شود.

کد مشکل 96: تنظیمات بهینه فایل php.ini و .htaccess برای فروشگاه‌های ووکامرسی بزرگ

❌ نشانه خطا: کاهش کندی عمومی و بهینه‌سازی پردازش‌ها.

🔍 علت ریشه‌ای: تنظیمات پیش‌فرض و محدود کننده هاست‌های اشتراکی.

✅ راهکار رفع مشکل:

مجموعه کانفیگ پیشنهادی زیر را در فایل‌های سرور اعمال نمایید:

// کانفیگ پیشنهادی PHP برای ووکامرس و سمافاکتور
memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 5000

کد مشکل 97: فعال‌سازی سیستم لاگ دیباگ اختصاصی سمافاکتور جهت رفع سریع مشکلات

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

🔍 علت ریشه‌ای: عدم دسترسی به خطاهای داخلی.

✅ راهکار رفع مشکل:

در تنظیمات پیشرفته سمافاکتور گزینه “ثبت لاگ‌های اختصاصی” را فعال کنید. لاگ‌ها در مسیر `/wp-content/uploads/samafactor/logs/` ذخیره می‌شوند.

کد مشکل 98: چک‌لیست سلامت افزونه پس از بروزرسانی بزرگ ووکامرس (Major Updates)

❌ نشانه خطا: اطمینان از صحت کارکرد پس از آپدیت‌های اصلی ووکامرس (مثل ووکامرس 9.0).

🔍 علت ریشه‌ای: تغییر هوک‌ها و متاداده‌ها در نسخه‌های اصلی ووکامرس.

✅ راهکار رفع مشکل:

۱. صدور یک فاکتور تست ۲. دانلود فایل PDF ۳. بررسی خروجی اکسل ۴. تست دکمه‌های پرینت.

کد مشکل 99: تنظیم سطح دسترسی کارمندان (User Roles) برای مشاهده و چاپ فاکتورها

❌ نشانه خطا: جلوگیری از دسترسی انباردار به تنظیمات افزونه.

🔍 علت ریشه‌ای: اعطای دسترسی کل administrator به همه کارمندان.

✅ راهکار رفع مشکل:

سمافاکتور قابلیت `manage_samafactor_invoices` را مجزا نموده تا بتوانید فقط به نقش “مدیر فروشگاه” یا “انباردار” دسترسی مشاهده و چاپ بدهید.

کد مشکل 100: استفاده از الگوی پشتیبان (Fallback HTML Template) در صورت قطع شدن PDF ساز

❌ نشانه خطا: عدم توقف ارائه فاکتور به مشتری حتی در صورت اختلال سروری.

🔍 علت ریشه‌ای: اختلال لحظه‌ای سرور در رندر PDF.

✅ راهکار رفع مشکل:

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

کد مشکل 101: تنظیم صحیح زمان‌بندی Cron Job در سرور به جای WP-Cron استاندارد

❌ نشانه خطا: کندی کشف وظایف زمان‌بندی شده یا عدم پاکسازی فایل‌های موقت.

🔍 علت ریشه‌ای: وابستگی WP-Cron به بازدید کاربران از سایت.

✅ راهکار رفع مشکل:

تعریف کرون جاب واقعی در cPanel یا DirectAdmin با دستور `wget -q -O – https://samavie.ir/wp-cron.php?doing_wp_cron` هر ۵ دقیقه یکبار.

کد مشکل 102: اقدامات امنیتی پیشرفته برای جلوگیری از جعل فاکتورهای رسمی (Anti-Fraud)

❌ نشانه خطا: خطر دستکاری کدهای HTML فاکتور توسط افراد سودجو.

🔍 علت ریشه‌ای: عدم وجود هش امنیتی یا لینک استعلام اصالت.

✅ راهکار رفع مشکل:

سمافاکتور هر فاکتور را با یک کلید هش اختصاصی (Order Hash Key) و QR کد صیادی قابل استعلام تجهیز می‌کند که هرگونه دستکاری را فاش می‌سازد.

$security_hash = md5( $order_id . $order_date . $order_total . SAMAFACTOR_AUTH_SALT );

مطلب اول: چرا سمافاکتور بهترین انتخاب برای فروشگاه‌های ووکامرسی ایران است؟

امروزه ارائه فاکتور رسمی شکیل با کادر تذهیب، اسلیمی و گل و بلبل یکی از ارکان اعتماد خریداران است. افزونه سمافاکتور با حل مشکلات فونت فارسی PDF، خروجی اکسل UTF-8 BOM، و اشتراک‌گذاری در ایتا، روبیکا و تلگرام، برترین گزینه است.

مطلب دوم: توضیحات برگه محصول

“با افزونه سمافاکتور، فاکتورهای بی‌روح و ساده ووکامرس را به یک اثر هنری با کادر تذهیب، اسلیمی و گل و بلبل تبدیل کنید! بدون حتی یک خط کدنویسی، خروجی PDF با فونت فارسی شفاف، فایل اکسل بدون بهم‌ریختگی و دکمه اشتراک‌گذاری مستقیم در ایتا، روبیکا و تلگرام را به مشتریان خود هدیه دهید.”

مطلب سوم: آموزش گام به گام نصب و راه اندازی

گام اول: دانلود و آپلود افزونه

از سایت سماویه (samavie.ir) فایل زیپ را دانلود و در پیشخوان وردپرس بخش افزونه‌ها آپلود کنید.

گام دوم: وارد کردن لایسنس

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

گام سوم: تنظیم ظاهر و تم تذهیب

لوگو، شعار، و تم رنگی (طلایی، شیراز، فیروزه‌ای یا زمردی) را انتخاب کنید.

راه‌های ارتباط و پشتیبانی 4 کانال فعال
💬
Samavie Creator 👋
سلام! به سماویه خوش آمدید ✨
پیمایش به بالا