מי שמכיר וורדפרס ויצא לו לעבוד עם ריבוי שפות ועדיין לא הכיר את wpml. אז בוודאי בחר להשתמש בפלאגין polylang.
זהו פלאגין שמאפשר לנו לייצר אתר במגוון שפות, אפילו המנוי החינמי עושה את כל האפשרויות בצורה טובה ולכן פלאגין זה קיים זמן רב ויש לו הרבה אוהדים. אישית אני גם אוהב אותו ויצא לי לאחרונה לעשות כמה שדברים מעניינים
זהו אומנם משהו שככל הנראה לא הרבה יתקלו בו אבל זהו המקרה שהיה לי:
ריבוי גדול של פוסטים בשפות שונות ויש לשייך בין הפוסטים בשפות השונות
- משימה לא פשוטה כי יש להכיר את האובייקט הגלובלי global $polylang
- לדעת איך נראה הרישום בDB .
- בנוסף לזה צריך לעבוד עם wpdb שידע להביא את הפוסטים המתאימים שקשורים רק לשפה הראשית
- ואז למצוא על ידי לולאה את הפוסטים שאותם תרצו לקשר לאותו הפוסט.
נתחיל בצעד הראשוון : global $polylang
global $polylang;
הרבה פלאגינים בעיקר הפלאגינים האיכותיים מאפשרים לגשת למשתנה גלובלי . במקרה של polylang אפשר להשתמש במשתנה כמו המוצג לעיל.
משתנה זה מאפשר לנו לעשות דברים רבים ושימושים שונים בניהול השפות שלנו. ספציפית למקרה הנקודתי שאני השתמשתי בו היה לייצר שיוך בין כל 3 פוסטים מאותה השפה.
והמימוש יחסית פשוט:
global $polylang , $wpdb; $postYIs = $wpdb->get_results("SELECT * FROM `wp_postmeta` WHERE `meta_key` = 'kodNomen' AND `meta_value` NOT REGEXP '-he|-en' ORDER BY `meta_key` DESC"); foreach($postYIs as $postYI){ $codeNomanQueryEn = $postYI->meta_value . '-en'; $codeNomanQueryHe = $postYI->meta_value . '-he'; $postENId = $wpdb->get_results( "SELECT * FROM `wp_postmeta` WHERE `meta_key` = 'kodNomen' AND `meta_value` LIKE '$codeNomanQueryEn' ORDER BY `meta_key` DESC"); $postHEId = $wpdb->get_results("SELECT * FROM `wp_postmeta` WHERE `meta_key` = 'kodNomen' AND `meta_value` LIKE '$codeNomanQueryHe' ORDER BY `meta_key` DESC"); if (isset(array_values($postHEId)[0]) && isset(array_values($postENId)[0])) { $polylang->model->save_translations('post', $postYI->post_id, array('he' => array_values($postHEId)[0]->post_id, 'en' => array_values($postENId)[0]->post_id)); } }
אמנם יש פה הרבה דברים שלא הסברתי עליהם עדיין אבל בוודאי שאגיע עליהם במדריך הוורדפרס שלי שתוכלו לקרוא ולהבין מה זה כל דבר ודבר.
באופן כללי , יש פה קריאה למשתנה גלובלי של וורדפרס שמאפשר לנו לעשות בקשות לSQL . ושמו wpdb .
לאחר שאני מחלץ את כל הפוסטים בשפה אחת, שהיא השפה הראשית של האתר כלומר שמסומנת בכוכב:

ואז אני רץ בפור לופ על כל הפוסטים בשפה הראשית ומוצא את הפוסטים המקבילים מהשפות האחרות ואז מגיע השימוש של polylang : (שמתי שוב את השורה הזו שיהיה יותר קל להתמצות)
$polylang->model->save_translations('post', $postYI->post_id, array('he' => array_values($postHEId)[0]->post_id, 'en' => array_values($postENId)[0]->post_id));
למעשה אני בוחר להשתמש באחד ההוקים שמיובאים מהמשתנה הגלובלי של פולילנג , שנקרא save_translations.
כל מה שאני צריך להעביר לו זה מיהוא הפוסט הראשי ומה הID שלו ואז מערך של שאר הפוסטים בשפות המקבילות עם האיידי שלהם .. והשיוך מתבצע בהצלחה!
ברור שאפשר לעשות שיוך כזה בקלות באמצעות הוורדפרס עצמו . אבל בשביל זה לא הייתי בוחר לרשום פוסט . הבעיה שלי הייתה שהייתי צריך לשייך יותר מ3000 פוסטים שהועלות באימפורט לDB. אז במקום לשבת ימים ולילות. בניתי את הלולאה שרצה על כל הפוסטים ומשייכת אותם ושומרת בDB . מה שאומר שהלולאה הזו לא תשאר יותר בקוד. היא רצה פעם אחת בלבד ולאחר מכן נמחקה מקובץ functions . כמו כן אספר כי הייתי חייב להריץ זאת לוקאלית וכן לשנות אז זמן הטעינה המקסימלי כי זה לקח הרבה זמן… ולאחר מכן החלפתי את הטבלה בDB באתר עצמו וזהו והכל הסתדר.
מקווה שאולי הקייס הזה יעזור לעוד מישהו, אני ישבתי על זה לא מעט זמן ומקווה שאולי זה יעזור למישהו שיצטרך יום אחד.
בהצלחה