اتبع دليلنا خطوة بخطوة لجعل إضافاتك وقوالبك متوافقة مع WPML.
هذا الدليل مخصص لمطوري القوالب والإضافات الذين انضموا بالفعل إلى برنامج التوافق الخاص بنا – Go Global. إذا لم تنضم بعد، يُرجى تقديم طلبك قبل اتباع هذا الدليل.
كيف تصبح متوافقاً مع WPML
1. إنشاء ملف تكوين اللغة
يخبر ملف تكوين اللغة WPML بالنصوص التي يجب ترجمتها (والتي لا يجب ترجمتها) في إضافتك أو قالبك. يتضمن ذلك النصوص في أنواع المنشورات المخصصة، والتصنيفات، والحقول، وشاشات لوحة التحكم، والودجات، والمزيد.
إذا كنت تعرف بالفعل كيفية إنشاء ملف تكوين اللغة، فاتبع التعليمات أدناه لاختبار إعدادك. وبخلاف ذلك، راجع دليل تكوين اللغة الخاص بنا لمعرفة كيفية إنشائه.
إعداد الاختبار
1. أنشئ بعض المنشورات والتصنيفات
2. أرسلها للترجمة
3. تحقق من ظهورها مترجمة في الواجهة الأمامية
2. تجهيز السلاسل النصية للترجمة
السلاسل النصية هي أي نصوص تظهر على الموقع وليست جزءاً من المنشورات، أو الصفحات، أو التصنيفات. للسماح لـ WPML بترجمة السلاسل النصية في إضافتك أو قالبك، اتبع التعليمات أدناه لكل حالة استخدام.
أثناء تكوين سلاسلك النصية، استخدم إضافة Multilingual Tools للتحقق من السلاسل النصية القابلة للترجمة، وتلك التي تحتاج إلى تكوين إضافي.
السلاسل النصية الثابتة (Hard-Coded)
يجب تسجيل السلاسل النصية الثابتة باستخدام دوال gettext. تعرف على المزيد حول استخدام gettext وتجهيز الكود الخاص بك.
السلاسل النصية في wp_options
إذا كانت إضافتك أو قالبك يستخدم سلاسل نصية من جدول wp_options، فسجّلها في ملف wpml-config.xml.
إذا كانت مفاتيح الخيارات الخاصة بك غير ثابتة، وكان قالبك يستخدم مصفوفة من الإدخالات التي قد تزداد مع إدخال المستخدم، فسجّل هذه الإدخالات ديناميكياً. يمكنك استخدام دوال API الخاصة بـ WPML للقيام بذلك.
السلاسل النصية الديناميكية
إذا لم تنطبق أي من الطرق السابقة على سلاسلك النصية، فاتبع هذه الأدلة لتجهيز السلاسل النصية للترجمة:
- جعل نصوص إدخال المستخدم قابلة للترجمة
- جعل المحتوى في جداول قاعدة البيانات المخصصة قابلاً للترجمة
- تجميع النصوص في حزم سلاسل نصية لترجمة أسرع
إعداد الاختبار
1. افحص إضافتك / قالبك بحثاً عن السلاسل النصية في WPML → تعريب القوالب والإضافات
2. أنشئ صفحة تحتوي على سلاسل نصية
3. تحقق مما إذا كانت السلاسل النصية تظهر في ترجمة النصوص
4. ترجم بعض السلاسل النصية وتحقق من ظهورها مترجمة في الواجهة الأمامية
3. تسجيل الودجات والكتل المخصصة للترجمة
إذا كان قالبك أو إضافتك يتضمن ودجات مخصصة لأدوات بناء الصفحات، مثل Elementor، فستحتاج إلى تسجيلها للترجمة.
راجع الأدلة التالية لمعرفة المزيد حول تسجيل محتوى أداة بناء الصفحات:
إعداد الاختبار
1. أنشئ صفحة تحتوي على جميع ودجاتك المخصصة
2. أرسل الصفحة للترجمة وتحقق من ظهور نصوص الودجات في محرر الترجمة المتقدم
3. تحقق من عرض الترجمات في الواجهة الأمامية
4. كرر الخطوات لاختبار إعدادات الودجات المختلفة
4. جلب المعرفات (IDs) تلقائياً من لغات مختلفة
إذا كان قالبك أو إضافتك يحتوي على ميزات أو خيارات تُحمّل معرفات (IDs) منشورات مختلفة في كل لغة، فاستخدم مرشّح wpml_object_id لجلب معرف المنشور المترجم تلقائياً.
على سبيل المثال، لنفترض وجود شريط تمرير (slider) يحتوي على شرائح بلغات مختلفة، ولكل منها معرف (ID) فريد. لتحميل معرف الشريحة الصحيح تلقائياً في كل لغة، يمكننا استخدام مرشّح wpml_object_id:
// Loop posts while (have_posts()): the_post(); $post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );
إعداد الاختبار
1. أنشئ المنشور / القالب ذي الصلة، وما إلى ذلك، وأضف سلسلة نصية
2. اضبط ميزتك لاستخدام ذلك المنشور
3. ترجم المنشور وعيّن قيمة مختلفة في السلسلة النصية
4. تحقق من أن الميزة تُحمّل المعرف المترجم في الواجهة الأمامية
5. التوافق مع WooCommerce
يمكن لـ WPML ترجمة محتوى WooCommerce باستخدام ملحق WPML Multilingual & Multicurrency for WooCommerce الخاص به. إذا كان قالبك أو إضافتك يحتوي على عناصر WooCommerce، فاتبع دليل توافق WPML Multilingual & Multicurrency for WooCommerce الخاص بنا لجعله متوافقاً مع WPML.
6. إظهار أو إخفاء مبدل لغة لوحة التحكم
افتراضياً، يضيف WPML مبدل لغة إلى شريط إدارة WordPress. يكون هذا المبدل مرئياً للمستخدمين المسجلين دخولهم، سواء في الواجهة الأمامية أو الخلفية.

في بعض الحالات، قد ترغب في إخفاء مبدل اللغة في الصفحات الحساسة، مثل منطقة إعداداتك. للقيام بذلك، أضف الكود التالي إلى ملف functions.php الخاص بك:
//Make sure to rename the function before adding to your plugin
add_filter( 'wpml_show_admin_language_switcher', 'compsupp_disable_wpml_admin_lang_switcher' );
function compsupp_disable_wpml_admin_lang_switcher( $state ) {
global $pagenow;
// Add the admin pages that we need to hide the language switcher
$admin_pages_to_hide_ls = array(
'admin-page-slug', 'another-admin-page-slug', 'one-more-admin-page-slug'
);
// We can also have a filter here in case we need to add/remove pages later
$admin_pages_to_hide_ls = apply_filters( 'compsupp_filter_disable_wpml_lang_switcher_in_admin', $admin_pages_to_hide_ls);
if (
$pagenow == 'admin.php'
&& isset( $_GET['page'] )
&& in_array( $_GET['page'], $admin_pages_to_hide_ls)
) {
$state = false;
}
return $state;
}
جعل الميزات الخاصة متوافقة
إذا كان قالبك أو إضافتك يتضمن ميزات خاصة (مثل استخدام الجداول المخصصة)، فستحتاج إلى استخدام كود مخصص لجعلها متوافقة مع WPML.
راجع موارد المطورين الخاصة بنا للحصول على معلومات حول التطوير المخصص.
المشاكل الشائعة والحلول
الحل:
$label = esc_html( apply_filters('wpml_translate_single_string', $this->checkout_item->name, 'wpsc', '$this->checkout_item->name .'_checkout_form_label'' ) );
لا تقوم دالة wp_query($args) أو get_posts($args) بتصفية معرفات المنشورات الصحيحة للغة الحالية +
الحل:
إذا كنت تستخدم wp_query($args) أو get_posts($args)، فستحتاج إلى إضافة ”suppress_filters=0“ إلى الوسائط (arguments).
يتم عرض جميع الشرائح بلغة واحدة +
الحل:
// Unset not translated slides
foreach( $slides as $k => $slide ) {
$check = apply_filters( 'wpml_post_language_details', NULL, $slide->ID )
$slide_language_code = substr( $check['locale'], 0, 2 );
if( $check['different_language'] ) {
unset( $slides[$k] );
}
}
معرف الشريحة (ID) مختلف في لغة ثانية +
الحل:
// Loop posts while (have_posts()): the_post(); $post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );
يستخدم شريط التمرير صفحة إدارة مخصصة وأحتاج إلى تسجيل قيم الحقول المخصصة للترجمات +
الحل:
// Adding a new slide code $slide_id = $this->slide->ID; $url = $fields['url']; // Register slide URL to translations do_action( 'wpml_register_single_string', 'Slider', 'Slide_ID_' . $this->slide->ID, $url); $this->add_or_update_or_delete_meta($this->slide->ID, 'url', $url);
معرف التصنيف المخصص (ID) مختلف في لغة ثانية +
الحل:
$taxonomy_id = apply_filters( 'wpml_object_id', $taxonomy_id, 'my_custom_taxonomy' );
طلبات AJAX المخصصة (غير القياسية في WordPress) تُرجع دائماً محتوى اللغة الافتراضية +
الحل:
عند بناء عناوين URL مخصصة لـ AJAX، استخدم خطّاف wpml_current_language وأضف اللغة الحالية كمعلمة (parameter) لعناوين URL الخاصة بـ AJAX.
$ajax_url = 'http://my-site.com/wp-content/plugins/my-plugin/handle-ajax.php';
$my_current_lang = apply_filters( 'wpml_current_language', NULL );
if ( $my_current_lang ) {
$ajax_url = add_query_arg( 'wpml_lang', $my_current_lang, $ajax_url );
// $ajax_url will be something like 'http://my-site.com/wp-content/plugins/my-plugin/handle-ajax.php?wpml_lang=es'
}
عند معالجة طلبات AJAX في ملف handle-ajax.php، وقبل إنشاء مخرجات المحتوى، استخدم خطّاف wpml_switch_language لتبديل لغة المحتوى.
if ( isset( $_GET[ 'wpml_lang' ] ) ) {
do_action( 'wpml_switch_language', $_GET[ 'wpml_lang' ] ); // switch the content language
}
// Run other content queries.
استخدام خاطئ لقيمة «id» في وسيطة (وسائط) WP_Query $args[ ‘tax_query’ ][ ‘field’ ] +
الحل:
يعمل استخدام وسيطة «id» للمعلمة «field» مع اللغة الافتراضية، ولكنه لا يعمل مع اللغة الثانية. فيما يلي مثال على استعلام غير صحيح:
$args = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'people',
'field' => 'id',
'terms' => 'bob',
),
),
);
$query = new WP_Query( $args );
يجب على المطورين تصحيح المعلمة «field».
'field' => 'id',
إلى:
'field' => 'term_id',
المرجع: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters. لا توجد قيمة «id» للمعلمة «field». قيمتها الافتراضية هي «term_id».