- สถานะ
- แก้ไขแล้ว
- รายงานสำหรับ
- WPML String Translation 3.2.15
- แก้ไขใน
- 3.2.16
- แท็กหัวข้อ
- Bug
ภาพรวมของปัญหา
ปัญหานี้เกิดขึ้นเมื่อการแปลแบบกำหนดเองที่เก็บไว้ในไฟล์ .mo ไม่สามารถโหลดได้อย่างถูกต้องบน WordPress 6.7.x หรือใหม่กว่า ปัญหานี้เกี่ยวข้องกับการเปลี่ยนแปลงวิธีที่ WordPress จัดการการโหลดการแปลแบบ Just-In-Time (JIT) ซึ่งส่งผลให้รายการการแปลถูกยกเลิกการตั้งค่าในตัวแปร global $l10n
วิธีแก้ปัญหาชั่วคราว
โปรดตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลเว็บไซต์ทั้งหมดของคุณก่อนดำเนินการต่อ
- เปิดไฟล์ …/wp-content/plugins/wpml-string-translation/classes/MO/Hooks/LoadTextDomain.php
- ค้นหาบรรทัดที่ 62
- แทนที่:
public function overrideLoadTextDomain( $override, $domain, $mofile ) { if ( ! $mofile ) { return $override; } if ( ! $this->isCustomMOLoaded( $domain ) ) { remove_filter( 'override_load_textdomain', [ $this, 'overrideLoadTextDomain' ], 10 ); $locale = $this->file_locale->get( $mofile, $domain ); $this->loadCustomMOFile( $domain, $mofile, $locale ); add_filter( 'override_load_textdomain', [ $this, 'overrideLoadTextDomain' ], 10, 3 ); } $this->loaded_mo_dictionary->addFile( $domain, $mofile ); return $override; } - ด้วย:
public function overrideLoadTextDomain( $override, $domain, $mofile ) { if ( ! $mofile ) { return $override; } if ( ! $this->isCustomMOLoaded( $domain ) ) { $locale = $this->file_locale->get( $mofile, $domain ); $wpml_mofile = $this->file_manager->get( $domain, $locale ); if ( ! file_exists( $mofile ) && $wpml_mofile ) { add_filter( 'load_translation_file', function($file) use ( $mofile, $wpml_mofile ) { if ( $file === $mofile ) { return $wpml_mofile; } return $file; // unset this own hook, just to be used once. }); return $override; } remove_filter( 'override_load_textdomain', [ $this, 'overrideLoadTextDomain' ], 10 ); $this->loadCustomMOFile( $domain, $mofile, $locale ); add_filter( 'override_load_textdomain', [ $this, 'overrideLoadTextDomain' ], 10, 3 ); } $this->loaded_mo_dictionary->addFile( $domain, $mofile ); return $override; }