- 状态
- 已由作者解决
- 解决于
- Impreza 8.18.5
- 相关插件/主题
- Impreza
- 主题标签
- Compatibility
问题概述
使用 Impreza 主题时,当使用某些小工具(如 Action box、Icon box、文本等)并为其分配 URL 时,这些 URL 在 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 ); } - 对原始页面进行少量修改,然后进行翻译