- Status
- Resolvido pelo autor
- Resolvido em
- Impreza 8.18.5
- Plugin/tema relacionado
- Impreza
- Tags de tópico
- Compatibility
Visão geral do problema
Com o tema Impreza, ao usar certos widgets como Action box, Icon box, Texto, etc., e atribuir URLs a eles, esses URLs aparecem codificados no Editor de tradução avançado do WPML, tornando sua tradução complicada.
Você também pode ver um erro semelhante:
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
Solução alternativa
Certifique-se de ter um backup completo do seu site antes de prosseguir.
- Abra o arquivo …/wp-content/plugins/us-core/plugins-support/wpml.php.
- Procure a linha 42.
- Substitua o código relacionado a wpml_pb_shortcode_encode_us_link e wpml_pb_shortcode_decode_us_link por:
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 ); } - Faça uma pequena modificação na página original e, em seguida, traduza-a