לאחרונה נדרשתי להוסיף אפשרות עריכה לעמוד ארכיון כלשהו (Archive Page) באתר מסויים העובד עם פולילנג. מכיוון ובעזרת ACF לא ניתן להוסיף שדות לעמוד ארכיון (וזאת כי לא קיים בפועל עמוד כזה שניתן לערוך), היה עליי להוסיף את אפשרות העריכה על ידי הוספת עמוד אפשרויות (Options Page) ב ACF.
בכל אופן, העניין הוא שעל אותו Option Page להופיע בכמה שפות מכיוון והאתר הוא רב לשוני.. אך כיצד ניתן להוסיף את עמוד האפשרויות עבור כל אחת מהשפות המוגדרות בפולילנג? מעבר לכך, איך ניתן למשוך לתבנית את המידע שאנו מכניסים באותם שדות לאחר יצירת עמוד האפשרויות עבור כל שפה?
בואו נראה כיצד לעשות זאת…
הוספת 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 את השפות המוגדרות בפולילנג ואת זאת עושים על ידי הוספת קוד השפה (Language Code) של כל אחת מהשפות הקיימות. את אותו Code ניתן למצוא בהגדרות השפה של פולילנג תחת Languages > Languages בממשק הניהול של וורדפרס.
במקרה של האתר שאני התעסקתי איתו מדובר על השפות en & cn (סינית ואנגלית) ואלו מופיעות בשורה 11 בקוד שצירפתי מעלה. לאחר הוספת הקוד יופיעו האפשרויות הבאות בממשק הניהול של וורדפרס:
בשלב זה עליכם להוסיף את השדות הרצויים לאותם עמודים, וזאת כשאתם בוחרים עמודים אלו תחת Location כשאתם יוצרים קבוצת שדות חדשה.
בזאת סיימתם חלק זה, לאחר הוספת השדות באתר בו אני מטפל אותם עמודי אפשרויות נראים באופן הבא:
כעת נשאר רק להבין כיצד ניתן למשוך שדות אלו בתבנית שלנו בהתאם לשפה של אותו עמוד בו אנו נמצאים…
משיכת השדות של עמוד האפשרויות לפי השפה הרלוונטית
חלק זה כבר פשוט יותר. בכדי לקבל את המידע ב PHP של אותם שדות שיצרנו ובהתאם לשפה של העמוד בו אנו צופים, עלינו להשתמש בפונקציה pll_current_language כפרמטר שני בקריאה לאותו שדה, בין אם זה על ידי הפונקציה get_field שאתם אמורים להכיר או כל פונקציה אחרת של 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(); ?>
עד כאן.
מציע להחליף את רשימת השפות שהיא הרד-קוד אצלך בשורה 11 עם קוד דינמי שכולל את הפונקציה pll_languages_list
רעיון מצויין, בא לך לרשום את הקוד המתוקן כתגובה?