WPML

פעל לפי המדריך שלנו צעד אחר צעד כדי להפוך את התוספים וערכות העיצוב שלך לתואמים ל־WPML.

מדריך זה מיועד למפתחי ערכות עיצוב ותוספים שכבר הצטרפו לתוכנית התאימות שלנו – Go Global. אם טרם הצטרפת, הגש את הבקשה שלך לפני שתפעל לפי מדריך זה.

כיצד להפוך לתואם ל־WPML

1. יצירת קובץ הגדרות שפה

קובץ הגדרות שפה אומר ל־WPML אילו טקסטים לתרגם (ואילו לא) בתוסף או בערכת העיצוב שלך. זה כולל טקסטים בסוגי תוכן מותאמים אישית, טקסונומיות, שדות, מסכי אזור הניהול, וידג'טים ועוד.

אם אתה כבר יודע כיצד ליצור קובץ הגדרות שפה, פעל לפי ההוראות להלן כדי לבדוק את ההגדרה שלך. אחרת, עיין במדריך הגדרות השפה שלנו כדי ללמוד כיצד ליצור אחד.

בדיקת ההגדרה
1. צור מספר פוסטים וטקסונומיות
2. שלח אותם לתרגום
3. ודא שהם מופיעים מתורגמים בצד הלקוח

2. הכנת מחרוזות לתרגום

מחרוזות הן כל הטקסטים שמופיעים באתר ואינם חלק מפוסטים, עמודים או טקסונומיות. כדי לאפשר ל־WPML לתרגם מחרוזות בתוסף או בערכת העיצוב שלך, פעל לפי ההוראות להלן עבור כל מקרה שימוש.

בזמן שאתה מגדיר את המחרוזות שלך, השתמש בתוסף Multilingual Tools כדי לוודא אילו מחרוזות ניתנות לתרגום, ואילו דורשות הגדרות נוספות.

מחרוזות Hard-Coded

עליך לרשום מחרוזות 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) משפות שונות

אם בערכת העיצוב או בתוסף שלך יש תכונות או אפשרויות שטוענות מזהי פוסטים שונים בכל שפה, השתמש בפילטר 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".

נכתב על ידיAmir