אם אתם צריכים לנהל תוכן שניתן לתרגום בעמודים ש-ACF לא יכול לטרגט ישירות (כמו עמודי ארכיון), עמודי אפשרויות של ACF הם הפתרון. באתר רב-לשוני עם פולילנג, צריך שכל עמוד אפשרויות ישמור ערכים נפרדים לכל שפה.
עמודי ארכיון הם "עמודים וירטואליים" ולא קיימים תחת עמודים בממשק הניהול של וורדפרס.
מדריך זה מראה כיצד ליצור עמודי אפשרויות לכל שפה ולמשוך את ערכי השדות הנכונים בהתאם לשפה הנוכחית.
חלופה באמצעות תוסף: התוסף ACF Options For Polylang (מעל 10,000 התקנות) מטפל בכך אוטומטית על ידי שמירת ערכים ספציפיים לשפה במסד הנתונים. הגישה הידנית שלהלן מעניקה שליטה מלאה ללא תוסף נוסף.
הוספת ACF Options Page לאתר Polylang
בכדי להוסיף את אותו עמוד האפשרויות לכל אחת מהשפות המוגדרות בפולילנג הוסיפו את הקוד הבא לקובץ functions.php:
if (function_exists('acf_add_options_page')) {
// Main Theme Settings Page
acf_add_options_page();
$parent = acf_add_options_page(array(
'page_title' => 'Archive General Settings',
'menu_title' => 'Archive Settings',
'redirect' => 'Archive Settings',
));
$languages = array('cn', 'en');
//
// Language Specific Options
// Translatable options specific languages. e.g., social profiles links
//
foreach ($languages as $lang) {
acf_add_options_sub_page(array(
'page_title' => 'Options (' . strtoupper($lang) . ')',
'menu_title' => __('Options (' . strtoupper($lang) . ')', 'text-domain'),
'menu_slug' => "options-${lang}",
'post_id' => $lang,
'parent' => $parent['menu_slug']
));
}
}בשורה 11, הגדירו את קודי השפה של כל שפה בפולילנג. ניתן למצוא קודים אלו תחת Languages > Languages בממשק הניהול של וורדפרס.
טיפ: במקום לכתוב שפות בקוד, ניתן לזהות אותן דינמית באמצעות pll_languages_list(). החליפו את שורה 11 ב: $languages = pll_languages_list(); כך, הוספת שפה חדשה בפולילנג תיצור אוטומטית את עמוד האפשרויות שלה.

לאחר הוספת הקוד, יופיעו אפשרויות ספציפיות לשפה בממשק הניהול של וורדפרס:

כעת, צרו קבוצת שדות חדשה והגדירו את ה-Location לעמוד האפשרויות:

לאחר הוספת שדות, עמודי האפשרויות המלאים ייראו כך:

משיכת השדות של עמוד האפשרויות לפי השפה הרלוונטית
כדי למשוך את ערכי השדות הנכונים לשפה הנוכחית, העבירו את pll_current_language('slug') כפרמטר שני לכל פונקציה של ACF:
<?php $image = get_field('image', pll_current_language('slug')); ?>או למשל בקריאה ל Repeater Field (שדה חזרה):
<?php if (have_rows('my_repeater_field', pll_current_language('slug'))) : ?>
<?php while (have_rows('my_repeater_field', pll_current_language('slug'))) : the_row(); ?>ודאו שאתם עוטפים קריאות ל-
pll_current_language()בבדיקתfunction_exists()אם הקוד עשוי לרוץ באתר ללא פולילנג מותקן.
שאלות נפוצות
סיכום
התאמת עמודי אפשרויות של ACF לעבודה עם פולילנג דורשת יצירת תת-עמודים נפרדים לכל שפה ושימוש בקוד השפה כ-post_id. בעת משיכת שדות בתבניות, העבירו את pll_current_language('slug') כפרמטר שני לכל פונקציה של ACF.
לגישה אוטומטית יותר, שקלו שימוש ב-pll_languages_list() לזיהוי דינמי של שפות, או בתוסף ACF Options For Polylang לפתרון ללא קוד.


מציע להחליף את רשימת השפות שהיא הרד-קוד אצלך בשורה 11 עם קוד דינמי שכולל את הפונקציה pll_languages_list
רעיון מצויין, בא לך לרשום את הקוד המתוקן כתגובה?