Skip Navigation
נכתב במקור
ינואר 26, 2013
מעודכן
מרץ 11, 2020

מפתחים יכולים ליצור מעבירי שפה מותאמים אישית משלהם באמצעות קריאת ה-API icl_get_languages של WPML. במדריך זה תמצא את הפרטים המלאים של icl_get_languages ודוגמאות של מעבירי שפה מותאמים אישית שנבנו באמצעותה.

סקריה מהירה:

  1. קרא לפונקציה icl_get_languages כדי לקבל את רשימת התרגומים עבור הדף המוצג כרגע
  2. כתוב פונקציית PHP משלך שתפיק את מעביר השפה
  3. מקם את מעביר השפה שלך בערכת העיצוב

קבלת רשימת השפות (האחרות)

השתמש בפונקציה icl_get_languages() כדי לקבל את רשימת התרגומים של דף כלשהו. אם אתה משתמש ב-WPML 3.2 ואילך, שקול להשתמש במסנן הוו הדומה wpml_active_languages.

שימוש:

icl_get_languages('skip_missing=N&orderby=KEY&order=DIR&link_empty_to=str')

* N=0/1
* KEY=id/code/name/custom (name -> translated_name), (default: id)
* DIR=asc/desc (default: asc)
* link_empty_to = str (ברירת מחדל: empty, פועלת יחד עם skip_missing=0 ומאפשרת שימוש בקישורים מותאמים אישית עבור השפות שאין בהן תרגומים עבור הרכיב הנוכחי. {%lang} יכול לשמש כמציין מקום עבור קוד השפה).

הערות:

  • הפרמטר skip_missing מספר לפונקציה כיצד לטפל בשפות ללא תרגומים.
  • השילוב של orderby ושל order מאפשר יצירת מעביר שפה נפתח או מעבירי שפה שבהם השפות תמיד מוצגות באותו המיקום.
  • ה-order המותאם אישית ניתן להגדרה בניהול של WordPress תחת WPML » שפות » אפשרויות מעביר שפה

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

Array
(
 [en] => Array
 (
 [id] => 1
 [active] => 1
 [native_name] => English
 [missing] => 0
 [translated_name] => English
 [language_code] => en
 [country_flag_url] => http://yourdomain/wpmlpath/res/flags/en.png
 [url] => http://yourdomain/about
 )

 [fr] => Array
 (
 [id] => 4
 [active] => 0
 [native_name] => Français
 [missing] => 0
 [translated_name] => French
 [language_code] => fr
 [country_flag_url] => http://yourdomain/wpmlpath/res/flags/fr.png
 [url] => http://yourdomain/fr/a-propos
 )

 [it] => Array
 (
 [id] => 27
 [active] => 0
 [native_name] => Italiano
 [missing] => 0
 [translated_name] => Italian
 [language_code] => it
 [country_flag_url] => http://yourdomain/wpmlpath/res/flags/it.png
 [url] => http://yourdomain/it/circa
 )
)

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

  • id: מזהה סימוכין פנימי
  • active: זו השפה הפעילה כרגע (רק שפה אחת פעילה בכל רגע נתון)
  • native_name: שם המקור של השפה (לעולם לא מתורגם)
  • translated_name: שם השפה מתורגם לשפה הפעילה כרגע
  • country_flag_url: כתובת ה-URL לתמונת PNG עם דגל הארץ
  • url: הקישור לתרגום בשפה זו
  • missing: 1 אם התרגום עבור רכיב זה חסר, 0 אם הוא קיים.

טיפול בתרגומים חסרים

ייתכן שחלק מהדפים לא יתורגמו לכל השפות. ניתן לומר ל- icl_get_languages מה להחזיר עבור שפות ללא תרגומים.

אם 'skip_missing=1', שפות אלו לא יופיעו בפלט. אם 'skip_missing=0', כל השפות יופיעו ושפות עם תרגומים חסרים יקושרו חזרה לדף הבית בשפה זו.

כיצד להשתמש בתוך הפונקציות של ערכת העיצוב

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

פונקציות ה-PHP לדוגמה שאנו מציגים כאן צריכים להיות בקובץ functions.php שלך (בתיקיית ערכת העיצוב) ואין להוסיף אותן לתוסף.

פוסט זה זמין גם ב…

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

function icl_post_languages(){
 $languages = icl_get_languages('skip_missing=1');
 if(1 < count($languages)){
 echo __('This post is also available in: ');
 foreach($languages as $l){
 if(!$l['active']) $langs[] = '<a href="'.$l['url'].'">'.$l['translated_name'].'</a>';
 }
 echo join(', ', $langs);
 }
}

מה שפונקצייה זו עושה הוא:

  1. לקבל את רשימת השפות מ-WPML – $languages = icl_get_languages('skip_missing=1');
  2. לבדוק שהפוסט הזה קיים ביותר משפה אחת – if(1 < count($languages))
  3. ליצור את הפלט, תוך דילוג על השפה המוצגת כרגע – if(!$l['active'])

הערות:

  1. ההדעה עוברת דרך gettext. זה חשוב מאוד, כדי שהודעה זו, שאותנה תצרף לפוסטים בשפות שונות, תופיע בשפה הנכונה: __('This post is also available in: ');
  2. שמות השפות שבהן משתמשים הם השמות המתורגמים של השפות. זה יבטיח שכל המשפט יהיה כתוב בשפה הנכונה: $l['translated_name']

התוצאה היא:

הודעה על פוסט הזמין בשפות אחרות
הודעה על פוסט הזמין בשפות אחרות

כדי לכלול הודעה זו בפוסטים, הוסף קריאה לפונקציה icl_post_languages() מהקובץsingle.php.

רשימת שמות ודגלים של שפות עבור הכותרת התחתית

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

function languages_list_footer(){
 $languages = icl_get_languages('skip_missing=0&orderby=code');
 if(!empty($languages)){
 echo '<div id="footer_language_list"><ul>';
 foreach($languages as $l){
 echo '<li>';
 if($l['country_flag_url']){
 if(!$l['active']) echo '<a href="'.$l['url'].'">';
 echo '<img src="'.$l['country_flag_url'].'" height="12" alt="'.$l['language_code'].'" width="18" />';
 if(!$l['active']) echo '</a>';
 }
 if(!$l['active']) echo '<a href="'.$l['url'].'">';
 echo icl_disp_language($l['native_name'], $l['translated_name']);
 if(!$l['active']) echo '</a>';
 echo '</li>';
 }
 echo '</ul></div>';
 }
}

פונקציה זו עושה את הדברים הבאים:

  1. אם יש שפת תרגום כלשהי, הפונקציה יוצרת DIV ומתחילה רשימה לא מסודרת: if(!empty($languages)){ echo '<div id="footer_language_list"><ul>';
  2. עוברת דרך כל אחת מהשפות ומוסיפה אותה כפריט רשימה.
  3. אם היא לא השפה הפעילה, גם יוצרת קישור לדף בשפה זו: if(!$l['active']) echo '<a href="'.$l['url'].'">';
  4. מוסיפה את דגל השפה: <img src="'.$l['country_flag_url'].'" alt="'.$l['language_code'].'" width="18" height="12" />
  5. מוסיפה גם את שם המקור וגם את השם המתורגם של השפה, אם הם שונים: echo icl_disp_language($l['native_name'], $l['translated_name']);

הפונקציה icl_disp_language() נוצרת על-ידי WPML. מה שהיא עושה הוא לבדוק האם שני הארגומנטים (native_language_name, translated_language_name) שונים זה מזה. אם כן, היא מחזירה את שניהם, אחרת היא מחזירה אותם רק פעם אחת.

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

#footer_language_list{
 margin-bottom: 25px;
 text-align: center;
}

#footer_language_list ul{
 list-style: none;
 margin:0;
 padding:0;
}

#footer_language_list ul li img{
 margin-right:5px;
}

#footer_language_list ul li{
 display:inline;
 margin:0 5px 0 5px;
 padding:0;
}

#footer_language_list ul li a, #footer_language_list ul li a:visited{
 color: #fff;
 text-decoration:underline;
}

#footer_language_list ul li a:hover, #footer_language_list ul li a:active{
 color: #fff;
}

הנה מעביר השפה:

כותרת תחתית של השפה
כותרת תחתית של השפה

כדי להוסיף אותו לערכת העיצוב, הוסף את הקריאה ל- languages_list_footer לקובץ footer.php .

* הערה: ניתן בקלות לשנות מעביר שפה אופקי זה למעביר שפה אנכי. הסר את ההצהרה display: inline מה-CSS.

בורר שפה עם דגלים בלבד

פונקציה פשוטה להצגת דגלים המקושרים לתרגומים של הדף הנוכחי.

Language selector with flags only
function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0&orderby=code');
    if(!empty($languages)){
        foreach($languages as $l){
            if(!$l['active']) echo '<a class="wpml-ls-item" href="'.$l['url'].'">';
            echo '<img src="'.$l['country_flag_url'].'" height="12" alt="'.$l['language_code'].'" width="18" />';
            if(!$l['active']) echo '</a>';
        }
    }
}

יש לעצב בנפרד את הפלט של פונקציה זו. לדוגמה מיקום הפונקציה בתוך בלוק div והגדת סגנונות מותאמים אישית עבור תגי ה-img.

<div id="flags_language_selector"><?php language_selector_flags(); ?></div >

ה-CSS:

#flags_language_selector img{
 margin:1px;
 border:1px solid #333;
}
בורר שפות עם דגלים

מעביר שפה המציג רק שפות שאינן פעילות

ניתן להשתמש בדוגמת הקוד במאמר זה כדי ליצור מעביר שפה עם המאפיינים הבאים:

  • מוצג אופקית
  • מתווסף לתפריט ספציפי
  • משתמש בדגלים ובשמות המקור של השפות
  • מציג רק שפות לא פעילות

יש להוסיף קוד זה לקובץ functions.php של ערכת העיצוב. פתרון עוד יותר טוב הוא להוסיף אותות לקובץ functions.php של ערכת עיצוב הבן של ערכת העיצוב.

כברירת מחדל, הקוד יעבוד היטב עם ברירות המחדל של ערכות העיצוב של WordPress (Twenty Sixteen, Twenty Fifteen וכו') כאשר theme_location == 'primary'.

זהו מעביר השפה בערכת העיצוב Twenty Sixteen כאשר השפה הנוכחית היא אנגלית.
זוהי התוצאה בערכת העיצוב Twenty Sixteen כאשר השפה הנוכחית היא אנגלית.

לגרום לקוד לעבוד עם ערכת העיצוב שלך

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

  1. הוצא מהערה את השורה במילים אחרות, הסר את הקו הנטוי הכפול (//) בתחילת השורה המכילה את הקוד שהוזכר לעיל.
  2. בקר בממשק הקצה של האתר. תראה מיקומי ערכות עיצוב כגון [theme_location] => my-theme-location.
  3. בחר את מיקום התפריט שאתה רוצה, למשל: my-theme-location, והחלף את השורה:
if ( $languages && $args->theme_location == 'primary') {

ל:

if ( $languages && $args->theme_location == 'my-theme-location') {

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

  1. בטל את השינויים שביצענו בשלב הראשון, כדי שהשורה תהיה זהה לקוד המקורי.

הקוד

// סנן את wp_nav_menu() כדי להוסיף קישורים נוספים ופלט אחר
// הצג רק שפות אחרות במעביר השפה
// השתמש במסנן החדש: https://wpml.org/wpml-hook/wpml_active_languages/ 
add_filter('wp_nav_menu_items', 'new_nav_menu_items', 10, 2);
function new_nav_menu_items($items, $args) {
 // הוצא מהערה כדי למצוא את מיקום התפריט בערכת העיצוב
 //echo "args:&lt;pre&gt;"; print_r($args); echo "&lt;/pre&gt;";

 // קבל שפות
 $languages = apply_filters( 'wpml_active_languages', NULL, 'skip_missing=0' );

 // הוסף את $args-&gt;theme_location == 'primary-menu' ב-If המותנה אם אתה רוצה לציין את מיקום התפריט.

 if ( $languages &amp;&amp; $args-&gt;theme_location == 'primary') {

 if(!empty($languages)){

 foreach($languages as $l){
 if(!$l['active']){
 // דגל עם השם המקורי
 $items = $items . '
&lt;li class="menu-item"&gt;&lt;a href="' . $l['url'] . '"&gt;&lt;img src="' . $l['country_flag_url'] . '" height="12" alt="' . $l['language_code'] . '" width="18" /&gt; ' . $l['native_name'] . '&lt;/a&gt;&lt;/li&gt;

';
 //only flag
 //$items = $items . '
&lt;li class="menu-item menu-item-language"&gt;&lt;a href="' . $l['url'] . '"&gt;&lt;img src="' . $l['country_flag_url'] . '" height="12" alt="' . $l['language_code'] . '" width="18" /&gt;&lt;/a&gt;&lt;/li&gt;

';
 }
 }
 }
 }

 return $items;
}

החלפת דגלי הארצות ושינוי שמות השפות

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

'skip_missing=0&orderby=name'