مباشر · الحالة OK
الوثائق · OW Forms v1.1.0

OW Forms
الوثائق

أداة بناء النماذج لـ WordPress، أُعيد تصميمها لعام 2026.

v1.1.0GPL-2.0-or-laterالوثائق

OW Forms — التوثيق

منشئ نماذج حديث ومتوافق مع GDPR (اللائحة العامة لحماية البيانات) بشكل أصلي لـ WordPress. المؤلف: OptionWeb — Julien Daniel صفحة الإضافة: https://optionweb.dev/ar/addons/ow-forms/ الترخيص: GPL-2.0-or-later الإصدار الذي يغطيه هذا المستند: 1.0.2


جدول المحتويات

  1. نظرة عامة
  2. التثبيت
  3. بداية سريعة — أول نموذج لك
  4. أنواع الحقول
  5. حزمة مكافحة الرسائل المزعجة
  6. ميزات GDPR
  7. إشعارات البريد الإلكتروني
  8. Webhooks
  9. رفع الملفات
  10. العرض: shortcode، Gutenberg، REST
  11. مستورد Contact Form 7
  12. مرجع الإعدادات
  13. REST API
  14. خطافات المطورين (filters & actions)
  15. التكامل مع OW Consent / OW Shield
  16. التدويل
  17. استكشاف الأخطاء
  18. الأسئلة الشائعة

نظرة عامة

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 (موصى به)

  1. لوحة WordPress → Plugins → Add New
  2. ابحث عن OW Forms
  3. انقر Install Now، ثم Activate

من رفع .zip

  1. حمّل ow-forms-1.0.2.zip من https://optionweb.dev/ar/addons/ow-forms/
  2. Plugins → Add New → Upload Plugin
  3. اختر الملف، انقر 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 (غير قابل للاستعلام علنيًا) يُستخدم لتخزين مخططات النماذج.


بداية سريعة

بعد التفعيل، يتم إنشاء نموذج "الاتصال" افتراضي تلقائيًا.

  1. اذهب إلى OW Forms → Forms في لوحة الإدارة
  2. لاحظ معرّف النموذج الافتراضي (مثل 1)
  3. في أي صفحة أو منشور، أدرج 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)
urlURLتحقق تلقائي 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 كلمة في textareas
  • spam_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.42192.168.1.0 (IPv4) / أول 4 مجموعات (IPv6)
fullIP كامل — استخدم فقط إذا كان أساسك القانوني يسمح بذلك

تخزين 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_htmltruefalse يتحول إلى نص عادي
mail_admin_subject[{{site_name}}] New message via {{form_title}}
mail_admin_bodyفارغ → يُبنى تلقائيًا من الحقول
mail_user_autoreply_enabledtrue
mail_user_subjectWe 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. خط الأنابيب:

  1. التحقق من جانب الخادم — حجم الملف (max_file_size_mb، افتراضي 8 MB)، قائمة سماح للامتدادات (allowed_file_types)، وفحص MIME finfo مقارنًا بـ wp_get_mime_types().
  2. التخزينwp-content/uploads/owf-uploads/YYYY/MM/<sha256>.<ext> مع .htaccess deny-all (Apache) و index.php فارغ (Nginx/IIS).
  3. سجل قاعدة البيانات — بيانات وصفية للملف + تجزئة SHA-256 في {prefix}_owf_files، مرتبطة بمعرف الإرسال الأصل.
  4. التنظيف — عند حذف الإرسال (يدويًا، بالاحتفاظ، أو 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

المستورد:

  1. يفحص كل منشور wpcf7_contact_form في قاعدة بياناتك
  2. يحلل كل نموذج CF7 معتمد على shortcode ويبني مخطط OW Forms المكافئ
  3. يحافظ على المستلم، الموضوع، رسائل النجاح/الخطأ، وأنواع الحقول
  4. يعيد كتابة كل shortcode [contact-form-7 id="..."] في كل post_content (صفحات، منشورات، custom post types) إلى [owf_form id="..."]
  5. يسجل النتائج: النماذج التي تم العثور عليها، المستوردة، المتخطاة (مستوردة بالفعل)

يمكن بعد ذلك تعطيل إضافة 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

استكشاف الأخطاء

يتم إرسال النموذج ولكن لا يصل أي بريد إلكتروني

  1. تحقق من قدرة موقعك على إرسال البريد على الإطلاق — جرب اختبارًا من نموذج الاتصال الخاص بأي إضافة أخرى أو مع Mail Tester
  2. تحقق من OW Forms → Submissions لتأكيد وصول الإرسال (إذا كان نعم، فالمشكلة في التسليم، وليس OW Forms)
  3. عيّن mail_failed_alert_email على عنوانك الخاص — سيرسل OW Forms لك بريدًا إلكترونيًا عندما يُرجع wp_mail() false
  4. ثبّت إضافة 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 الخاص بك يؤكد السياسة.

أين الدعم؟


تم البناء بواسطة OptionWeb — Julien Daniel، Châtelet، بلجيكا.