اتبع دليلنا التفصيلي لجعل إضافاتك وقوالبك متوافقة مع WPML.
هذا الدليل مخصص لمطوري القوالب والإضافات الذين انضموا بالفعل إلى برنامج التوافق الخاص بنا – Go Global. إذا لم تكن قد انضممت بعد، فيرجى تقديم طلبك قبل اتباع هذا الدليل.
كيف تصبح متوافقاً مع WPML
1. إنشاء ملف تكوين اللغة
يخبر ملف تكوين اللغة WPML بالنصوص التي يجب ترجمتها (والتي لا يجب ترجمتها) في إضافتك أو قالبك. يشمل ذلك النصوص في أنواع المنشورات المخصصة، والتصنيفات، والحقول، وشاشات لوحة التحكم، والودجات، والمزيد.
إذا كنت تعرف بالفعل كيفية إنشاء ملف تكوين اللغة، فاتبع التعليمات أدناه لاختبار إعدادك. وبخلاف ذلك، راجع دليل تكوين اللغة الخاص بنا لمعرفة كيفية إنشائه.
إعداد الاختبار
1. أنشئ بضع مقالات وتصنيفات
2. أرسلها للترجمة
3. تحقق من ظهورها مترجمة في الواجهة الأمامية
2. تجهيز السلاسل النصية للترجمة
السلاسل النصية هي أي نصوص تظهر على الموقع ولا تشكل جزءاً من المقالات، أو الصفحات، أو التصنيفات. للسماح لـ WPML بترجمة السلاسل النصية في إضافتك أو قالبك، اتبع التعليمات أدناه لكل حالة استخدام.
أثناء تكوين سلاسلك النصية، استخدم إضافة Multilingual Tools للتحقق من السلاسل النصية القابلة للترجمة، وتلك التي تحتاج إلى تكوين إضافي.
السلاسل النصية الثابتة
يجب تسجيل السلاسل النصية الثابتة باستخدام دوال gettext. تعرف على المزيد حول استخدام gettext وتجهيز تعليماتك البرمجية.
السلاسل النصية في wp_options
إذا كانت إضافتك أو قالبك يستخدم سلاسل نصية من جدول wp_options، فسجّلها في ملف wpml-config.xml.
إذا كانت مفاتيح الخيارات الخاصة بك غير ثابتة، وكان قالبك يستخدم مصفوفة من الإدخالات التي قد تزداد مع إدخال المستخدم، فسجّل هذه الإدخالات ديناميكياً. يمكنك استخدام دوال API الخاصة بـ WPML للقيام بذلك.
السلاسل النصية الديناميكية
إذا لم تنطبق أي من الطرق السابقة على سلاسلك النصية، فاتبع هذه الأدلة لتجهيز السلاسل النصية للترجمة:
- جعل نصوص إدخال المستخدم قابلة للترجمة
- جعل المحتوى في جداول قاعدة البيانات المخصصة قابلاً للترجمة
- تجميع النصوص في حزم سلاسل نصية لترجمة أسرع
إعداد الاختبار
1. افحص إضافتك / قالبك بحثاً عن السلاسل النصية في WPML → تعريب القوالب والإضافات
2. أنشئ صفحة تحتوي على سلاسل نصية
3. تحقق مما إذا كانت السلاسل النصية تظهر في ترجمة النصوص
4. ترجم بضع سلاسل نصية وتحقق من ظهورها مترجمة في الواجهة الأمامية
3. تسجيل الودجات والكتل المخصصة للترجمة
إذا كان قالبك أو إضافتك يتضمن ودجات مخصصة لأدوات بناء الصفحات، مثل Elementor، فستحتاج إلى تسجيلها للترجمة.
راجع الأدلة التالية لمعرفة المزيد حول تسجيل محتوى أداة بناء الصفحات:
إعداد الاختبار
1. أنشئ صفحة تحتوي على جميع ودجاتك المخصصة
2. أرسل الصفحة للترجمة وتحقق من ظهور نصوص الودجات في محرر الترجمة المتقدم
3. تحقق من عرض الترجمات في الواجهة الأمامية
4. كرر الخطوات لاختبار إعدادات الودجات المختلفة
4. جلب المعرفات (IDs) تلقائياً من لغات مختلفة
إذا كان قالبك أو إضافتك يحتوي على ميزات أو خيارات تُحمّل معرفات مقالات مختلفة في كل لغة، فاستخدم المرشِّح wpml_object_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» إلى الوسائط.
تُعرض جميع الشرائح بلغة واحدة +
الحل:
// 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] );
}
}
معرف الشريحة مختلف في اللغة الثانية +
الحل:
// 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);
معرف التصنيف المخصص مختلف في اللغة الثانية +
الحل:
$taxonomy_id = apply_filters( 'wpml_object_id', $taxonomy_id, 'my_custom_taxonomy' );
طلبات AJAX المخصصة (غير القياسية في WordPress) تُرجع دائماً محتوى اللغة الافتراضية +
الحل:
عند بناء عناوين URL مخصصة لـ AJAX، استخدم الخطّاف wpml_current_language وأضف اللغة الحالية كمعلمة لعناوين 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 لتبديل لغة المحتوى. أغلق نطاق اللغة عند الانتهاء. منذ إصدار WPML 5.0، تتداخل تبديلات اللغة، لذا يحتاج كل تبديل إلى استعادته الخاصة.
if ( ! empty( $_GET[ 'wpml_lang' ] ) ) {
// Opens a language scope. Only a non-empty language code switches the language.
do_action( 'wpml_switch_language', sanitize_text_field( $_GET[ 'wpml_lang' ] ) );
try {
// Run other content queries.
} finally {
// Closes the scope that the call above opened.
do_action( 'wpml_switch_language', null );
}
}
استخدام خاطئ لقيمة «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».