- สถานะ
- แก้ไขแล้วโดยผู้พัฒนา
- แก้ไขใน
- Impreza 8.18.5
- ปลั๊กอิน/ธีมที่เกี่ยวข้อง
- Impreza
- แท็กหัวข้อ
- Compatibility
ภาพรวมของปัญหา
สำหรับธีม Impreza เมื่อใช้วิดเจ็ตบางตัว เช่น Action box, Icon box, ข้อความ ฯลฯ และกำหนด URL ให้กับวิดเจ็ตเหล่านั้น URL เหล่านี้จะปรากฏในรูปแบบที่ถูกเข้ารหัสในตัวแก้ไขการแปลขั้นสูง (ATE) ของ WPML ซึ่งทำให้การแปลมีความซับซ้อน
คุณอาจพบข้อผิดพลาดที่คล้ายกันด้วย:
htmlspecialchars_decode(): Argument #1 ($string) must be of type string, array given .../wp-content/plugins/sitepress-multilingual-cms/addons/wpml-page-builders/classes/Shared/st/strategy/shortcode/class-wpml-pb-update-shortcodes-in-content.php:203
วิธีแก้ปัญหาชั่วคราว
โปรดตรวจสอบให้แน่ใจว่าคุณมีข้อมูลสำรองแบบเต็มของเว็บไซต์ก่อนดำเนินการต่อ
- เปิดไฟล์ …/wp-content/plugins/us-core/plugins-support/wpml.php
- ค้นหาบรรทัดที่ 42
- แทนที่โค้ดที่เกี่ยวข้องกับ wpml_pb_shortcode_encode_us_link และ wpml_pb_shortcode_decode_us_link ด้วย:
if ( ! function_exists( 'wpml_pb_shortcode_encode_us_link' ) ) { /** * Add support for "link" control * * @param string $string * @param string $encoding * @param string $original_string * @return string */ function wpml_pb_shortcode_encode_us_link( $string, $encoding, $original_string ) { if ( 'us_link' === $encoding ) { $output = array(); //In translation we can save the new encoding method only i.e. JSON. foreach ( $string as $combined_key => $value ) { $parts = explode( '_', $combined_key ); $i = array_pop( $parts ); $key = implode( '_', $parts ); $cleaned_keys[ $i ][ $key ] = $value; } foreach ( $cleaned_keys as $subkey ) { foreach ( $subkey as $key => $value ) { $output[$key] = $value; } } $string = urlencode(json_encode($output)); } return $string; } add_filter( 'wpml_pb_shortcode_encode', 'wpml_pb_shortcode_encode_us_link', 10, 3 ); } if ( ! function_exists( 'wpml_pb_shortcode_decode_us_link' ) ) { /** * Add support for "link" control * * @param string $string * @param string $encoding * @param string $original_string * @return array */ function wpml_pb_shortcode_decode_us_link( $string, $encoding, $original_string ) { if ( 'us_link' === $encoding ) { $original_string = urldecode( $original_string ); $is_json = true; $strings = json_decode($original_string); $string = []; // There are two types of encoding, the new method uses JSON and old method uses custom encoding. if ($strings === NULL) { $is_json = false; $strings = explode("|", $original_string); } foreach ( $strings as $i => $value ) { if ($is_json) { $rows[][$i] = $value; } else { $item = explode(":", $value); $key = $item[0]; unset($item[0]); $value = implode(":", $item); $row[$key] = $value; $rows[] = $row; unset($row[$key]); } } foreach ( $rows as $i => $row ) { foreach ( $row as $key => $value ) { if ( $key == 'url' ) { $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => true ); } else { $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => false ); } } } } return $string; } add_filter( 'wpml_pb_shortcode_decode', 'wpml_pb_shortcode_decode_us_link', 10, 3 ); } - ทำการแก้ไขเล็กน้อยในหน้าต้นฉบับ จากนั้นทำการแปล