OW Forms — التوثيق
منشئ نماذج حديث ومتوافق مع GDPR (اللائحة العامة لحماية البيانات) بشكل أصلي لـ WordPress. المؤلف: OptionWeb — Julien Daniel صفحة الإضافة: https://optionweb.dev/ar/addons/ow-forms/ الترخيص: GPL-2.0-or-later الإصدار الذي يغطيه هذا المستند: 1.0.2
جدول المحتويات
- نظرة عامة
- التثبيت
- بداية سريعة — أول نموذج لك
- أنواع الحقول
- حزمة مكافحة الرسائل المزعجة
- ميزات GDPR
- إشعارات البريد الإلكتروني
- Webhooks
- رفع الملفات
- العرض: shortcode، Gutenberg، REST
- مستورد Contact Form 7
- مرجع الإعدادات
- REST API
- خطافات المطورين (filters & actions)
- التكامل مع OW Consent / OW Shield
- التدويل
- استكشاف الأخطاء
- الأسئلة الشائعة
نظرة عامة
OW Forms هو منشئ نماذج مدفوع بالمخطط. كل نموذج هو مستند JSON يصف حقوله والتحقق وسلوك الإرسال. تعرض الإضافة هذا المخطط كـ HTML يمكن الوصول إليه، وتتحقق من الإرسالات على الخادم، وتمررها عبر حزمة مكافحة رسائل مزعجة بأربع طبقات، وتحفظ ما تسمح به، وتطلق إشعارات البريد الإلكتروني + webhook.
ما يأتي معها (كل شيء مجاني، GPL-2):
- محرك مخطط JSON مع 17 نوعًا من الحقول
- مكافحة رسائل مزعجة بـ 4 طبقات: honeypot، time-trap، CAPTCHA متعدد المزودين، سمعة IP
- موافقة GDPR أصلية + احتفاظ + DSAR
- REST API (namespace
owf/v1) — إرسال عام + CRUD للمسؤول - كتلة Gutenberg + shortcode + واجهة عرض PHP
- Webhooks صادرة موقعة بـ HMAC
- مستورد Contact Form 7 بنقرة واحدة
- يكتشف تلقائيًا رموز السمة OW Canvas للاتساق البصري
ما لا تفعله عمدًا:
- معالجة الدفع (استخدم WooCommerce + checkout مخصص)
- معالجات متعددة الصفحات تتجاوز التالي/السابق البسيط (استخدم إضافة معالج مخصصة)
- منشئ مرئي بالسحب والإفلات في v1 (محرر JSON فقط؛ المنشئ المرئي في خريطة الطريق)
التثبيت
من WordPress.org (موصى به)
- لوحة WordPress → Plugins → Add New
- ابحث عن
OW Forms - انقر Install Now، ثم Activate
من رفع .zip
- حمّل
ow-forms-1.0.2.zipمن https://optionweb.dev/ar/addons/ow-forms/ - Plugins → Add New → Upload Plugin
- اختر الملف، انقر Install Now، ثم Activate
المتطلبات
- WordPress 6.0 أو أحدث
- PHP 7.4 أو أحدث (يُوصى بـ 8.1+)
- MySQL/MariaDB مع دعم عمود
JSON(5.7+ / 10.2+)
ما يتم تثبيته
عند التفعيل، ينشئ OW Forms ثلاث جداول مخصصة:
{prefix}_owf_submissions— حمولات الإرسالات + بيانات وصفية للرسائل المزعجة{prefix}_owf_files— سجل الملفات المرفوعة{prefix}_owf_log— سجل تدقيق الإرسالات
بالإضافة إلى Custom Post Type owf_form (غير قابل للاستعلام علنيًا) يُستخدم لتخزين
مخططات النماذج.
بداية سريعة
بعد التفعيل، يتم إنشاء نموذج "الاتصال" افتراضي تلقائيًا.
- اذهب إلى OW Forms → Forms في لوحة الإدارة
- لاحظ معرّف النموذج الافتراضي (مثل
1) - في أي صفحة أو منشور، أدرج shortcode:
[owf_form id="1"]
…أو أدرج كتلة Gutenberg OW Forms واختر النموذج من القائمة المنسدلة.
هذا كل شيء. يتم عرض النموذج، ويقبل الإرسالات، ويرسل بريد إلكتروني للمسؤول إلى
admin_email، ويخزن الإرسال في قاعدة البيانات.
لتخصيصه، افتح النموذج في OW Forms → Forms → [Edit] وعدّل مخطط JSON مباشرة. منشئ مرئي مدرج في خريطة الطريق v1.1.
أنواع الحقول
يدعم OW Forms 17 نوعًا من الحقول. كل حقل في المخطط هو كائن مع
على الأقل type و name؛ معظمها يقبل أيضًا label، help، required،
placeholder وخيارات خاصة بالنوع.
type | الغرض | خيارات بارزة |
|---|---|---|
text | نص في سطر واحد | placeholder، pattern، maxlength |
email | عنوان بريد إلكتروني | تحقق تلقائي RFC 5322 |
tel | رقم هاتف | تحقق متساهل (متوافق مع E.164) |
url | URL | تحقق تلقائي http(s):// |
number | رقمي | min، max، step |
textarea | نص متعدد الأسطر | rows، maxlength |
select | قائمة منسدلة واحدة | options: [{value, label}] |
radio | اختيار واحد | options: [{value, label}] |
checkbox | منطقي واحد | default: bool |
checkbox-group | اختيار متعدد | options: [{value, label}] |
date | منتقي تاريخ | min، max (YYYY-MM-DD) |
time | منتقي وقت | min، max (HH:MM) |
datetime | تاريخ + وقت | min، max (YYYY-MM-DDTHH:MM) |
file | رفع ملف | multiple: bool، accept |
hidden | قيمة مخفية | مفيد للتتبع |
rating | تقييم 1–5 نجوم | — |
consent | مربع موافقة GDPR | يُحقن تلقائيًا عند تفعيل GDPR |
مثال مخطط
{
"title": "Contact us",
"fields": [
{
"type": "text",
"name": "name",
"label": "Your name",
"required": true,
"placeholder": "Jane Doe"
},
{
"type": "email",
"name": "email",
"label": "Email",
"required": true
},
{
"type": "select",
"name": "subject",
"label": "How can we help?",
"required": true,
"options": [
{"value": "quote", "label": "Request a quote"},
{"value": "support", "label": "Technical support"},
{"value": "other", "label": "Other"}
]
},
{
"type": "textarea",
"name": "message",
"label": "Message",
"required": true,
"rows": 6
}
],
"submit": {
"label": "Send",
"success_message": "Thanks — we will reply within 24 hours.",
"redirect_url": ""
}
}
قيم name للحقول تصبح مفاتيح في الحمولة المخزنة ورموزًا يمكنك استخدامها
في قوالب البريد الإلكتروني ({{name}}، {{email}}، إلخ).
حزمة مكافحة الرسائل المزعجة
يقوم OW Forms بتشغيل أربع طبقات مستقلة بالتوازي. كل طبقة تخصص مساهمة في الدرجة؛ الإرسال الذي يحصل على درجة ≥ 80 يتم إسقاطه بصمت — لا تُرجع أي رسالة خطأ، بحيث لا تستطيع الروبوتات التكرار ضد الحماية.
1. Honeypot
حقل نص مخفي بصريًا تملؤه الروبوتات ولا يملؤه البشر. الإعداد:
spam_honeypot_enabled(افتراضي:true)
2. Time-trap
يرفض الإرسالات المكتملة بأسرع من حد قابل للتكوين (الروبوتات النموذجية ترسل POST فورًا).
spam_timetrap_enabled(افتراضي:true)spam_timetrap_min_seconds(افتراضي:2)
3. CAPTCHA (متعدد المزودين)
تحقق رمز من خادم إلى خادم مقابل واجهة برمجة تطبيقات المزود. اختر واحدًا من:
turnstile— Cloudflare Turnstile (موصى به، أولوية الخصوصية، بدون تجربة تحدي)recaptcha_v3— Google reCAPTCHA v3 (غير مرئي)hcaptcha— hCaptcha (widget مرئي)friendly_captcha— Friendly Captcha (widget مستضاف ذاتيًا، مرخص بـ MIT، صديق لأوروبا)
عيّن spam_captcha_provider، spam_captcha_site_key، و spam_captcha_secret_key
في علامة تبويب إعدادات مكافحة الرسائل المزعجة. الافتراضي هو none.
ملاحظة: يتم تحميل JS الخاص بـ Turnstile / reCAPTCHA / hCaptcha من أصل المزود الخاص (يقوم JS الخاص بهم بفحص توقيع الأصل من جانب الخادم). Friendly Captcha مستضاف ذاتيًا تحت
assets/js/vendor/.
4. سمعة IP (اختيارية)
عند تثبيت OW Shield وتفعيله، يستخدم OW Forms تغذية سمعة IP الخاصة به لتقييم الإرسالات:
spam_owshield_iprep(افتراضي:true)spam_block_disposable_emails(افتراضي:true) — يرفض@mailinator،@tempmail، و~120 نطاق آخر للاستخدام مرة واحدة
الاستدلالات الإضافية
spam_min_words_per_text_area— يتطلب على الأقل N كلمة في textareasspam_max_links_per_submission— يرفض إذا كان هناك أكثر من N من URLs في الحمولةspam_blocklist_emails،spam_blocklist_words،spam_blocklist_ips— قوائمك الخاصة
التسجيل
كل قرار بشأن رسائل مزعجة يُسجل مع السبب. تحقق من OW Forms → Submissions → مرشح "spam" لضبط العتبات دون طيران أعمى.
ميزات GDPR
الامتثال لـ GDPR أصلي. الإعدادات الافتراضية محافظة؛ خفّفها فقط إذا كانت لديك مشورة قانونية للقيام بذلك.
مربع الموافقة
يتم حقن مربع موافقة تلقائيًا في أسفل كل نموذج عندما
يكون gdpr_consent_required هو true (افتراضي). النص قابل للتكوين:
'gdpr_consent_text' => __(
'I agree that my data will be processed to respond to my inquiry, in accordance with the privacy policy.',
'ow-forms'
)
إذا كان gdpr_auto_link_privacy مفعّلًا (افتراضي)، فإن الكلمات "privacy policy" /
"سياسة الخصوصية" يتم ربطها تلقائيًا بعنوان URL لسياسة الخصوصية الخاصة بـ OW Consent
عندما تكون تلك الإضافة نشطة، أو بصفحة الخصوصية المُكوّنة في WP خلاف ذلك.
أوضاع تخزين IP
إعداد store_ip:
| القيمة | ما يتم تخزينه |
|---|---|
none | لا شيء — لا يتم الاحتفاظ بأي IP |
pseudonymized (افتراضي) | 192.168.1.42 → 192.168.1.0 (IPv4) / أول 4 مجموعات (IPv6) |
full | IP كامل — استخدم فقط إذا كان أساسك القانوني يسمح بذلك |
تخزين user agent
إعداد store_user_agent:
| القيمة | ما يتم تخزينه |
|---|---|
none | لا شيء |
hashed (افتراضي) | SHA-256 لـ UA + wp_salt() |
full | سلسلة UA مقتطعة (الحد الأقصى 64 chars) |
الاحتفاظ والتطهير
cron يومي يطهر الإرسالات الأقدم من gdpr_retention_days (افتراضي:
1095 يومًا — معيار CNIL لبيانات العملاء المحتملين). عيّن إلى 0 لتعطيل
التطهير التلقائي.
إذا كان gdpr_auto_delete_after_response هو true، فإن وسم الإرسال كـ
"تمت معالجته" يحذفه على الفور مع أي ملفات مرفوعة.
DSAR — الوصول / المسح من قبل صاحب البيانات
يتم تجزئة رسائل البريد الإلكتروني للنموذج باستخدام wp_salt() عند التخزين. عندما يكون
OW Consent نشطًا وتتم معالجة مسح DSAR لعنوان بريد إلكتروني، يحذف OW Forms
الإرسالات المطابقة تلقائيًا حسب email_hash ويطلق:
do_action( 'owf_gdpr_erased_for_email', $hash, $count );
بدون OW Consent، يمكنك استدعاء المسح يدويًا:
OWF_GDPR::erase_by_email( 'user@example.com' ); // returns int count
إشعارات البريد الإلكتروني
القوالب
كل من إشعار المسؤول والرد التلقائي للمستخدم يدعمان استبدال {{token}}:
| الرمز | يتحول إلى |
|---|---|
{{site_name}} | get_bloginfo('name') |
{{form_title}} | عنوان النموذج |
{{form_id}} | معرّف رقمي للنموذج |
{{submission_id}} | معرّف رقمي للإرسال (0 إذا لم يُخزن) |
{{date}} | طابع زمني للإرسال |
{{ip}} | IP حسب وضع store_ip |
{{page_url}} | URL الذي تم إرسال النموذج منه |
{{all_fields}} | جميع أزواج مفتاح/قيمة الحقول |
{{<field_name>}} | أي حقل حسب name الخاص به (مثل {{email}}، {{message}}) |
الإعدادات
| الإعداد | الافتراضي | ملاحظات |
|---|---|---|
default_recipient_email | فارغ → admin_email | قابل للتجاوز لكل نموذج عبر schema.mail.recipient |
from_name | فارغ | اسم العرض للمرسل |
from_email | فارغ → افتراضي WP | عنوان المرسل |
mail_html | true | false يتحول إلى نص عادي |
mail_admin_subject | [{{site_name}}] New message via {{form_title}} | |
mail_admin_body | فارغ → يُبنى تلقائيًا من الحقول | |
mail_user_autoreply_enabled | true | |
mail_user_subject | We have received your message | |
mail_user_body | فارغ → تأكيد عام | |
mail_failed_alert_email | فارغ | يُخطر عند فشل إرسال البريد |
تجاوز لكل نموذج
يمكن لمخطط النموذج تجاوز القيم العامة:
{
"mail": {
"recipient": "sales@example.com",
"subject": "New lead — {{name}}",
"body": "Lead: {{name}}\\nEmail: {{email}}\\nMessage: {{message}}",
"autoreply": true,
"autoreply_subject": "Thanks, {{name}}!",
"autoreply_body": "Hi {{name}},\\n\\nWe got your message."
}
}
Webhooks
عند تعيين webhook_url، يطلق كل إرسال ناجح طلب POST HTTP.
الحمولة (JSON)
{
"form_id": 1,
"form_title": "Contact",
"submission_id": 42,
"received_at": "2026-05-13T14:32:18+00:00",
"fields": { "name": "Jane", "email": "jane@example.com", "message": "Hi" },
"site": "https://example.com"
}
توقيع HMAC
إذا تم تعيين webhook_secret، يتضمن الطلب:
X-OWF-Signature: sha256=<hex digest of HMAC-SHA256(body, secret)>
التحقق من جانب المستلم (مثال Node):
const expected = crypto
.createHmac('sha256', SECRET)
.update(rawBody)
.digest('hex');
const provided = req.headers['x-owf-signature'].replace(/^sha256=/, '');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(provided))) {
return res.status(401).end('bad sig');
}
إعادة المحاولات
إذا أرجع المستلم 5xx أو انتهت مهلته، يعيد OW Forms المحاولة بـ backoff أسي (60 ث → 5 دقيقة → 30 دقيقة). بعد 3 إخفاقات، يُسجل webhook كـ فاشل دائمًا ولكنه لا يعيق الإرسال.
رفع الملفات
عندما يكون allow_file_uploads مفعّلًا (افتراضي true)، يتم قبول أي حقل من نوع file.
خط الأنابيب:
- التحقق من جانب الخادم — حجم الملف (
max_file_size_mb، افتراضي 8 MB)، قائمة سماح للامتدادات (allowed_file_types)، وفحص MIMEfinfoمقارنًا بـwp_get_mime_types(). - التخزين —
wp-content/uploads/owf-uploads/YYYY/MM/<sha256>.<ext>مع.htaccessdeny-all (Apache) وindex.phpفارغ (Nginx/IIS). - سجل قاعدة البيانات — بيانات وصفية للملف + تجزئة SHA-256 في
{prefix}_owf_files، مرتبطة بمعرف الإرسال الأصل. - التنظيف — عند حذف الإرسال (يدويًا، بالاحتفاظ، أو DSAR)، تُزال جميع الملفات المرتبطة.
هام: يستخدم OW Forms مسار رفع معزولًا مخصصًا، وليس مكتبة وسائط WordPress، لذلك الملفات المرفوعة غير قابلة للاكتشاف عبر نقطة النهاية القياسية
/wp-json/wp/v2/mediaولا يتم إنشاء صور مصغرة. هذا متعمد — مرفقات النموذج خاصة بمالك النموذج.
أنواع الملفات المسموح بها (افتراضي)
pdf, jpg, jpeg, png, webp, doc, docx, xls, xlsx, csv, txt
للتوسيع:
add_filter( 'owf_settings', function( $s ) {
$s['allowed_file_types'] = array_merge(
(array) $s['allowed_file_types'],
array( 'odt', 'ods', 'zip' )
);
return $s;
} );
العرض
Shortcode
[owf_form id="42"]
[owf_form slug="contact"]
id (معرّف رقمي للمنشور) أو slug (slug المنشور) — أحدهما مطلوب.
كتلة Gutenberg
في محرر الكتل، ابحث عن "OW Forms" في مدرج الكتل واختر نموذجك من القائمة المنسدلة.
PHP
echo OWF_Form::render( 42 );
// or
echo do_shortcode( '[owf_form id="42"]' );
REST
يمكن أيضًا إرسال النموذج برمجيًا — انظر REST API.
مستورد CF7
إذا كان Contact Form 7 مثبتًا أو كان مثبتًا، فإن OW Forms يأتي مع مستورد بنقرة واحدة.
OW Forms → Tools → Import from Contact Form 7
المستورد:
- يفحص كل منشور
wpcf7_contact_formفي قاعدة بياناتك - يحلل كل نموذج CF7 معتمد على shortcode ويبني مخطط OW Forms المكافئ
- يحافظ على المستلم، الموضوع، رسائل النجاح/الخطأ، وأنواع الحقول
- يعيد كتابة كل shortcode
[contact-form-7 id="..."]في كلpost_content(صفحات، منشورات، custom post types) إلى[owf_form id="..."] - يسجل النتائج: النماذج التي تم العثور عليها، المستوردة، المتخطاة (مستوردة بالفعل)
يمكن بعد ذلك تعطيل إضافة CF7 وإزالتها.
المستورد idempotent: تشغيله مرتين لا ينشئ تكرارات. نماذج CF7 المستوردة بالفعل تُوسم عبر meta key
_owf_imported_from_cf7ويتم تخطيها في عمليات التشغيل اللاحقة.
مرجع الإعدادات
تُخزن جميع الإعدادات في مفتاح خيار واحد، owf_settings. يمكنك قراءتها
أو تجاوزها برمجيًا:
$value = OWF_Core::setting( 'spam_timetrap_min_seconds' );
OWF_Core::update_settings( array( 'spam_timetrap_min_seconds' => 3 ) );
الإعدادات الافتراضية الكاملة
array(
// General
'default_recipient_email' => '', // empty = admin_email
'from_name' => '',
'from_email' => '',
'sender_uses_dpo' => true,
// Anti-spam
'spam_honeypot_enabled' => true,
'spam_timetrap_enabled' => true,
'spam_timetrap_min_seconds' => 2,
'spam_captcha_provider' => 'none',
'spam_captcha_site_key' => '',
'spam_captcha_secret_key' => '',
'spam_owshield_iprep' => true,
'spam_block_disposable_emails' => true,
'spam_min_words_per_text_area' => 0,
'spam_max_links_per_submission' => 3,
'spam_blocklist_emails' => array(),
'spam_blocklist_words' => array(),
'spam_blocklist_ips' => array(),
// GDPR
'gdpr_consent_required' => true,
'gdpr_consent_text' => '...',
'gdpr_auto_link_privacy' => true,
'gdpr_retention_days' => 1095,
'gdpr_auto_delete_after_response' => false,
// Storage
'store_submissions' => true,
'store_ip' => 'pseudonymized',
'store_user_agent' => 'hashed',
'allow_file_uploads' => true,
'max_file_size_mb' => 8,
'allowed_file_types' => array( 'pdf', 'jpg', 'jpeg', 'png',
'webp', 'doc', 'docx', 'xls',
'xlsx', 'csv', 'txt' ),
// Notifications
'mail_html' => true,
'mail_admin_subject' => '[{{site_name}}] New message via {{form_title}}',
'mail_admin_body' => '',
'mail_user_autoreply_enabled' => true,
'mail_user_subject' => 'We have received your message',
'mail_user_body' => '',
'mail_failed_alert_email' => '',
'webhook_url' => '',
'webhook_secret' => '',
// Rendering
'style_preset' => 'auto',
'button_label_default' => 'Send',
'success_message_default' => 'Your message has been sent. We will reply within 24 hours.',
'error_message_default' => 'An error occurred. Please try again or contact us directly.',
'inherit_theme_tokens' => true,
// Analytics (opt-in)
'track_conversions' => false,
'conversion_event_name' => 'generate_lead',
'conversion_value' => 0,
'conversion_currency' => 'EUR',
);
REST API
جميع نقاط النهاية تعيش تحت namespace owf/v1.
نقطة النهاية العامة
| الطريقة | المسار | الإذن |
|---|---|---|
POST | /owf/v1/submit | محمي بـ nonce (wp_rest) |
Body:
{
"form_id": 1,
"fields": { "name": "Jane", "email": "jane@example.com", "message": "Hi" },
"_owf_nonce": "<from wp_create_nonce('owf_submit_form')>",
"_owf_time": 1736780000,
"_owf_hp": ""
}
استجابة (200):
{ "ok": true, "id": 42, "message": "Your message has been sent." }
استجابة (422) عند فشل التحقق:
{
"ok": false,
"errors": { "email": "Please enter a valid email" },
"message": "Please review the fields in error."
}
نقاط نهاية المسؤول (تتطلب manage_options)
| الطريقة | المسار | الوصف |
|---|---|---|
GET | /owf/v1/forms | قائمة بجميع النماذج |
GET | /owf/v1/forms/{id} | احصل على نموذج واحد |
PUT | /owf/v1/forms/{id} | حدّث النموذج |
POST | /owf/v1/forms/create | أنشئ نموذجًا |
GET | /owf/v1/submissions | قائمة الإرسالات (المرشحات: form_id، status) |
GET | /owf/v1/submissions/{id} | احصل على إرسال واحد |
POST | /owf/v1/submissions/{id}/handle | وسم كمعالج (قد يحذف) |
POST | /owf/v1/importer/cf7 | شغّل مستورد CF7 |
GET/POST | /owf/v1/settings | اقرأ أو اكتب إعدادات الإضافة |
تتطلب جميع نقاط نهاية المسؤول كلًا من capability manage_options و nonce REST WP صالح.
الخطافات (filters & actions)
Actions
/**
* Fires after a submission has been processed and stored.
*
* @param int $submission_id Database ID (0 if not stored)
* @param int $form_id Form ID
* @param array $cleaned Sanitized field payload
* @param array $schema Full form schema
*/
do_action( 'owf_submission_received', $submission_id, $form_id, $cleaned, $schema );
/**
* Fires after a DSAR erasure has deleted matching submissions by email hash.
*
* @param string $email_hash SHA-256(email + wp_salt())
* @param int $deleted_count
*/
do_action( 'owf_gdpr_erased_for_email', $email_hash, $deleted_count );
Filters
/**
* Filter the resolved settings array (merged defaults + saved + per-request).
*/
apply_filters( 'owf_settings', array $settings );
/**
* Whitelist of trusted reverse proxy IPs that may set X-Forwarded-For.
* Without this OW Forms ignores proxy headers (to prevent IP spoofing).
*/
apply_filters( 'owf_trusted_proxies', array $proxies );
/**
* List of disposable email domains rejected when `spam_block_disposable_emails`
* is on.
*/
apply_filters( 'owf_disposable_domains', array $domains );
النمط الموصى به — توسيع قائمة النطاقات للاستخدام مرة واحدة
add_filter( 'owf_disposable_domains', function( $list ) {
return array_merge( $list, array(
'example-throwaway.com',
'company-blocked-domain.net',
) );
} );
النمط الموصى به — دفع الإرسالات إلى CRM
add_action( 'owf_submission_received', function( $sid, $form_id, $cleaned ) {
if ( $form_id !== 7 ) return; // only the "Sales" form
wp_remote_post( 'https://crm.example.com/leads', array(
'headers' => array( 'Authorization' => 'Bearer ' . CRM_TOKEN ),
'body' => wp_json_encode( array(
'email' => $cleaned['email'],
'name' => $cleaned['name'],
'message' => $cleaned['message'],
'source' => 'website-form',
) ),
'headers' => array( 'Content-Type' => 'application/json' ),
) );
}, 10, 3 );
التكاملات
OW Canvas (السمة)
عندما تكون سمة OW Canvas
نشطة، يرث OW Forms خصائص CSS المخصصة الخاصة بها (--owc-ink، --owc-paper،
--owc-accent، إلخ) للاتساق البصري. عطّل بـ
inherit_theme_tokens = false.
OW Consent
عندما يكون OW Consent نشطًا:
- يتم توجيه رابط مربع موافقة GDPR تلقائيًا إلى عنوان URL سياسة الخصوصية الخاصة بـ OW Consent
- ترتبط الإرسالات بسجلات OW Consent (عندما يكون لدى الزائر كوكي معرّف موافقة)
- تدفقات مسح DSAR من OW Consent تطهر تلقائيًا إرسالات OW Forms لنفس تجزئة البريد الإلكتروني
OW Shield
عندما يكون OW Shield نشطًا و
spam_owshield_iprep مفعّلًا، يتم تقييم IP لكل إرسال مقابل تغذية سمعة
OW Shield قبل قبوله.
التدويل
اللغة المصدر هي الإنجليزية. تأتي ترجمة فرنسية تحت
languages/ow-forms-fr_FR.po.
للمترجمين
قالب .pot موجود في languages/ow-forms.pot. أرسل الترجمات
عبر translate.wordpress.org/projects/wp-plugins/ow-forms
بمجرد الموافقة على الإضافة في WP.org. للتوزيع المحلي، ضع
ow-forms-<locale>.mo في المجلد languages/.
تجميع .mo محليًا
msgfmt languages/ow-forms-fr_FR.po -o languages/ow-forms-fr_FR.mo
استكشاف الأخطاء
يتم إرسال النموذج ولكن لا يصل أي بريد إلكتروني
- تحقق من قدرة موقعك على إرسال البريد على الإطلاق — جرب اختبارًا من نموذج الاتصال الخاص بأي إضافة أخرى أو مع Mail Tester
- تحقق من OW Forms → Submissions لتأكيد وصول الإرسال (إذا كان نعم، فالمشكلة في التسليم، وليس OW Forms)
- عيّن
mail_failed_alert_emailعلى عنوانك الخاص — سيرسل OW Forms لك بريدًا إلكترونيًا عندما يُرجعwp_mail()false - ثبّت إضافة SMTP (Fluent SMTP، WP Mail SMTP، إلخ) —
mail()PHP الافتراضية مرفوضة من قبل 95 % من الخوادم المستلمة
CAPTCHA لا يظهر
- تحقق من تعيين كل من
spam_captcha_site_keyوspam_captcha_secret_key - افتح الصفحة في DevTools — يجب أن يتم تحميل عنوان URL سكريبت المزود بـ 200
- لـ reCAPTCHA، يجب تسجيل نطاق موقعك في لوحة إدارة Google
- لـ Turnstile، يجب أن يكون وضع widget في لوحة إدارة Cloudflare "Managed" أو "Non-interactive"
يتم رفع الملفات ولكن المسؤول لا يمكنه تنزيلها
هذا متعمد — تُقدَّم الملفات المرفوعة بواسطة معالج PHP موثّق،
وليس مباشرة. تحقق من تسجيل الدخول كمستخدم بـ manage_options.
يقول مستورد CF7 "0 نماذج موجودة"
يفحص المستورد post type wpcf7_contact_form. إذا كان CF7 معطلًا بالفعل
وتم حذف المنشورات، فلا يوجد شيء آخر لاستيراده.
أعد تفعيل CF7 للاستيراد فقط، ثم عطّله مرة أخرى.
جدول الإرسالات ضخم
- خفّض
gdpr_retention_days(افتراضي 1095 / 3 سنوات) - عطّل
store_submissionsإذا كنت تحتاج فقط إلى تسليم البريد الإلكتروني، وليس سجل تدقيق قاعدة بيانات - عيّن
gdpr_auto_delete_after_response = trueللحذف عند "تمت المعالجة"
الأسئلة الشائعة
هل OW Forms مجاني؟ نعم. GPL-2.0-or-later. لا يوجد إصدار Pro، ولا مفتاح ترخيص، ولا ميزة مغلقة خلف الدفع.
هل يعمل على WordPress Multisite؟ نعم — كل موقع لديه جداوله الخاصة ومكتبة نماذج خاصة، معزولة كما هو متوقع.
هل يدعم النماذج متعددة الخطوات؟ يعمل التنقل الأساسي التالي/السابق عبر تجميع الحقول في المخطط. تجربة wizard من الدرجة الأولى مدرجة في خريطة الطريق v1.1.
كيف أصدّر الإرسالات؟ OW Forms → Submissions → Export CSV. يحترم التصدير المرشحات الحالية (النموذج، نطاق التاريخ، الحالة).
هل يمكنني استضافة نماذجي خلف paywall أو تسجيل دخول؟
نعم — غلّف shortcode في منطق gating لأي إضافة عضوية، أو
اعرض عبر PHP داخل فحص is_user_logged_in().
هل يتكامل مع أدوات تسويق البريد الإلكتروني / CRM؟
بشكل افتراضي: webhooks (POST موقّع بـ HMAC إلى أي نقطة نهاية)، ومستلمو بريد إلكتروني
لكل نموذج. لـ Brevo / Mailchimp / HubSpot / Pipedrive، اربط
owf_submission_received واستدعِ REST API للمزود — انظر
قسم Hooks.
هل الإضافة معتمدة GDPR؟ الإعدادات الافتراضية للإضافة متوافقة مع أفضل ممارسات CNIL / GDPR، ولكن الاعتماد عملية قانونية خاصة بإعداد المتحكم في البيانات الخاص بك. نحن نوفر الأدوات التقنية؛ DPO الخاص بك يؤكد السياسة.
أين الدعم؟
- بوابة الدعم: https://optionweb.dev/ar/addons/support/
- البريد الإلكتروني: support@optionweb.dev
- التوثيق: https://optionweb.dev/ar/addons/ow-forms/
تم البناء بواسطة OptionWeb — Julien Daniel، Châtelet، بلجيكا.