This thread is resolved. Here is a description of the problem and solution.
Problem:
The client was unable to translate the content within tables on specific web pages using WPML, as the content did not appear when clicking on 'Edit Translation'.
Solution:
We identified that the content within the tables was managed by a shortcode. To enable translation for these shortcodes, we recommended the following steps:
1. Register the shortcode attributes for translation by adding the following code to the WPML > Settings > Custom XML Configuration tab:
<shortcode>
<tag>tek_pricing</tag>
<attributes>
<attribute label="Pricing title">pricing_title</attribute>
<attribute label="Pricing time">pricing_time</attribute>
<attribute label="Pricing button text">pricing_button_text</attribute>
<attribute type="area" encoding="urlencoded_json">pricing_option</attribute>
</attributes>
</shortcode>
2. Add the following code to the file functions.php in the child theme folder to handle the encoding and decoding of the URL-encoded JSON:
add_filter( 'wpml_pb_shortcode_encode', 'wpml_pb_shortcode_encode_urlencoded_json', 10, 3 );
function wpml_pb_shortcode_encode_urlencoded_json( $string, $encoding, $original_string ) {
if ( 'urlencoded_json' === $encoding ) {
$output = array();
foreach ( $original_string as $combined_key => $value ) {
$parts = explode( '_', $combined_key );
$i = array_pop( $parts );
$key = implode( '_', $parts );
$output[ $i ][ $key ] = $value;
}
$string = urlencode( json_encode( $output ) );
}
return $string;
}
add_filter( 'wpml_pb_shortcode_decode', 'wpml_pb_shortcode_decode_urlencoded_json', 10, 3 );
function wpml_pb_shortcode_decode_urlencoded_json( $string, $encoding, $original_string ) {
if ( 'urlencoded_json' === $encoding ) {
$rows = json_decode( urldecode( $original_string ), true );
$string = array();
foreach ( $rows as $i => $row ) {
foreach ( $row as $key => $value ) {
if ( in_array( $key, array( 'text', 'title', 'features', 'substring', 'btn_text', 'label', 'value', 'y_values', 'pricing_row_tooltip', 'pricing_row' ) ) ) {
$string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => true );
} else {
$string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => false );
}
}
}
}
return $string;
}
3. Edit the page in the English language, click on Update, and then update the translation page. The pricing option content should now be available in the translation editor.
If this solution does not resolve your issue, or if it seems outdated or irrelevant to your specific case, we highly recommend checking the related known issues, verifying the version of the permanent fix, and confirming that you have installed the latest versions of themes and plugins. If further assistance is needed, please open a new support ticket.
This is the technical support forum for WPML - the multilingual WordPress plugin.
Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.
This topic contains 3 replies, has 2 voices.
Last updated by 1 year, 3 months ago.
Assisted by: Long Nguyen.

