WPML

قبل أن تبدأ

ثبّت وفعّل هذه الإضافات:

  • WPGraphQL (الإضافة مفتوحة المصدر من مشروع WPGraphQL).
  • WPML و WPML ترجمة النصوص.
  • WPML GraphQL (الملحق الذي تغطيه هذه الصفحة).

إذا كنت تستخدم أيضًا Advanced Custom Fields:

  • Advanced Custom Fields Multilingual (ACFML).
  • WPGraphQL for Advanced Custom Fields (من مشروع WPGraphQL).

يجب ترجمة المحتوى المصدر الخاص بك في WPML قبل أن تُرجع الاستعلامات أدناه أي شيء. عند تشغيل ترجم كل شيء تلقائيًا (الوضع الافتراضي في WPML 5)، يتم إنتاج الترجمات في الخلفية أثناء نشرك للمحتوى. للإعداد اليدوي، أرسل المحتوى للترجمة من WPML > الترجمات > لوحة التحكم. المقالات والمصطلحات المترجمة هي ما تقوم استعلامات GraphQL أدناه بتصفيته وإرجاعه.

بيئة تطوير GraphQL (GraphQL IDE) – أين تختبر الاستعلامات

تضيف WPGraphQL شاشة GraphQL > GraphQL IDE إلى لوحة تحكم WordPress. يُدرج Query Composer الخاص ببيئة التطوير (IDE) كل حقل متاح، بما في ذلك وسيطة language وحقل translations الخاصين بـ WPML، ويُشغّل الاستعلامات على موقعك المباشر. اختبر الاستعلامات هناك قبل ربطها بإطار عمل الواجهة الأمامية الخاص بك.

الاستعلام عن المحتوى لكل لغة

أضف where: { language: "<code>" } إلى أي استعلام قائمة: المقالات، أنواع منشورات مخصصة، مصطلحات التصنيف، القوائم، عناصر القائمة، التعليقات. رمز اللغة هو نفس الرمز الذي تستخدمه WPML في كل مكان (en، es، fr، pt-pt، وهكذا). مرر language: "all" لإرجاع المحتوى من كل لغة في نفس الوقت.

query PostsES {
  posts(where: { language: "es" }) {
    nodes {
      slug
      uri
      categories {
        nodes { name }
      }
    }
  }
}

عندما تتم تصفية عقدة ذات مستوى أعلى حسب اللغة، تتبع العناصر المتصلة (التصنيفات، الوسوم، التصنيفات المخصصة) نفس اللغة تلقائيًا. يُرجع الاستعلام أعلاه المقالات باللغة الإسبانية مع التصنيفات باللغة الإسبانية، دون الحاجة إلى وسائط إضافية.

جلب كل ترجمة لعقدة في استعلام واحد

أضف حقل translations إلى أي استعلام مقالة أو تصنيف لإرجاع إصدارات اللغات الأخرى للعقدة في نفس الحمولة (payload):

query PostsWithTranslations {
  posts(where: { language: "en" }) {
    nodes {
      slug
      uri
      language { code }
      translations {
        slug
        uri
        language { code }
      }
    }
  }
}

تعود كل مقالة بحقولها الإنجليزية بالإضافة إلى مصفوفة من المعرّفات النصية للروابط وعناوين URI الخاصة بها باللغات الأخرى. هذا هو الشكل الذي يستخدمه مبدل اللغة المعروض بجوار محتوى الصفحة: طلب واحد، وكل بديل يمكن للزائر التبديل إليه.

الاستعلام عن مقالة معينة بواسطة المعرّف أو المعرّف النصي للرابط بأي لغة

لجلب مقالة مترجمة واحدة مباشرة (بواسطة معرّفها النصي للرابط المترجم أو بواسطة معرّف قاعدة البيانات)، استخدم استعلام post المفرد مع idType:

query PostBySlug {
  post(id: "hola-mundo", idType: SLUG) {
    title
    slug
    uri
    language { code }
  }
}
query PostById {
  post(id: "2", idType: DATABASE_ID) {
    title
    slug
    uri
    language { code }
  }
}

يُرجع كلا الاستعلامين المقالة المترجمة (العنوان، المعرّف النصي للرابط، URI) دون مزيد من التصفية في الواجهة الأمامية.

القوائم متعددة اللغات

استعلم عن القوائم وعناصر القائمة لكل لغة باستخدام نفس وسيطة language:

query NavES {
  menu(language: "es", id: "primary", idType: SLUG) {
    menuItems {
      nodes {
        label
        url
        path
      }
    }
  }
}

يعود label و url لكل عنصر قائمة باللغة المستعلم عنها. عناصر القائمة التي ترتبط بمقالات مترجمة تُحل إلى URI المترجم تلقائيًا. تمت إضافة هذا الدعم في WPML GraphQL 1.1.0.

اللغات المثبتة – لمبدل اللغة

بالنسبة لمبدل اللغة العام (المستقل عن أي مقالة مفردة)، استخدم استعلامي languages و defaultLanguage لسرد كل لغة على الموقع:

query SiteLanguages {
  languages {
    code
    country_flag_url
    default_locale
    native_name
    translated_name
    url
  }
  defaultLanguage {
    code
    native_name
  }
}

يُرجع عقدة واحدة لكل لغة نشطة مع عنوان URL للعلم، والاسم الأصلي، والاسم المترجم، وعنوان URL للرئيسية للغة. هذه بيانات كافية لعرض مبدل لغة يحتوي على علم وتسمية دون الحاجة إلى كتابة قائمة اللغات برمجيًا (hard-coding).

الاستعلام عن حقول مخصصة لـ ACF لكل لغة

عندما تكون ACFML و WPGraphQL for ACF نشطة، تتبع حقول ACF في المقالات وأنواع منشورات مخصصة لغة المقالة المضيفة تلقائيًا. لا توجد حاجة لوسيطة إضافية. بالنسبة لـ ACF Options Pages، والتي لا ترتبط بمقالة واحدة، أضف وسيطة language إلى استعلام Options Page:

query Settings {
  myOptionPage(language: "de") {
    addressFieldGroup {
      addressTitle
      repeaterAddressDetails { addressDetails }
    }
  }
}

تتوقع الوسيطة رمز لغة يطابق إحدى اللغات النشطة في موقعك.

القيود المعروفة والحلول البديلة المؤقتة

  • البيانات الوصفية للمؤلف والمستخدم لا تُرجع قيمًا مترجمة. إذا كنت تعرض السير الذاتية للمؤلفين لكل لغة، فاحفظ السيرة الذاتية المترجمة في حقل ACF الخاص بالمستخدم واستعلم عن ذلك الحقل بدلاً من ذلك.
  • عناوين URI المترجمة في بعض أشكال الاستعلام. عند جلب مقالة مترجمة بواسطة URI (contentNode(id: "/de/some-slug/", idType: URI))، تحقق من أن URI المُرجع يطابق ما هو منشور في اللغة – تُرجع بعض أشكال الاستعلام مسارات غير متسقة. اختبرها في GraphQL IDE قبل ربطها بالتوجيه (routing).
  • ACF Options Pages بدون وسيطة language تعود إلى اللغة الافتراضية. مرر دائمًا language لاستعلامات Options Page في المواقع متعددة اللغات.

إذا واجهت مشكلة في الدمج غير مدرجة هنا، فإن فريق دعم WPML يغطي جانب WPML من حزمة WPGraphQL على مدار الساعة طوال أيام الأسبوع.

بقلم Amir · آخر تحديث في 2 يوليو 2026

بقلم Amir · آخر تحديث 2 يوليو 2026