WPML
Trạng thái
Đã được giải quyết bởi nhà phát triển
Đã giải quyết trong
Impreza 8.18.5
Plugin/giao diện liên quan
Impreza
Thẻ chủ đề
Compatibility

Tổng quan về lỗi

Với giao diện Impreza, khi sử dụng một số widget nhất định như Action box, Icon box, Văn bản, v.v. và gán URL cho chúng, các URL này hiển thị dưới dạng mã hóa trong Trình biên tập dịch thuật nâng cao của WPML, khiến việc dịch chúng trở nên phức tạp.

Bạn cũng có thể thấy một lỗi tương tự:

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

Giải pháp tạm thời

Vui lòng đảm bảo có một bản sao lưu đầy đủ cho trang web của bạn trước khi tiếp tục.


  • Mở tệp …/wp-content/plugins/us-core/plugins-support/wpml.php.

  • Tìm dòng 42.

  • Thay thế mã liên quan đến wpml_pb_shortcode_encode_us_linkwpml_pb_shortcode_decode_us_link bằng:
    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 );
    }
  • Thêm một sửa đổi nhỏ trên trang gốc, sau đó dịch trang đó

Tất cả các lỗi đã ghi nhận →