ערכות עיצוב ותוספים מסוימים משתמשים בשורטקודים מסוג urlencoded. לדוגמה, זהו המצב במודולים של תוסף בניית העמודים WPBakery, כמו Progress Bar, Round Chart או Line Chart. במדריך זה, אנו מסבירים כיצד להפעיל את התרגום של תוכן שנעשה בו שימוש עם סוגים אלה של שורטקודים.
מהם שורטקודים מסוג "urlencoded"?
כאשר אתה מוסיף אלמנט שמשתמש בשורטקודים מסוג urlencoded ומעביר את עורך WordPress שלך למצב טקסט, תראה שהם נראים כמו בדוגמה הבאה.
[vc_progress_bar values="%5B%7B%22label%22%3A%22Development%20Test%22%2C%22value%22%3A%2290%22%7D%2C%7B%22label%22%3A%22Design%20Test%22%2C%22value%22%3A%2280%22%7D%2C%7B%22label%22%3A%22Marketing%22%2C%22value%22%3A%2270%22%2C%22color%22%3A%22bar_blue%22%7D%5D" title="Progress Bar Title Test" units="%"]
ה־value בשורטקודים כאלה מפוענח למערך מקודד ב־JSON בדומה לבא:
[{"label":"Development Test","value":"90"},{"label":"Design Test","value":"80"},{"label":"Marketing","value":"70","color":"bar_blue"}]ולבסוף, פלט ה־JSON הזה מפוענח גם הוא למערך הדומה לזה:
מערך JSON מפוענח
array (
0 =>
array (
'label' => 'Development Test',
'value' => '90',
),
1 =>
array (
'label' => 'Design Test',
'value' => '80',
),
2 =>
array (
'label' => 'Marketing',
'value' => '70',
'color' => 'bar_blue',
),
)אם זה נראה לך מורכב מדי, אל תדאג. זהו תהליך פנימי שבו אינך צריך להתערב כמשתמש.
תרגום ערכים בשורטקודים מסוג "urlencoded"
כעת, בוא נראה כיצד לתרגם את חלקי ה־label וה־value של מערך זה. לפני גרסה 3.9 של WPML, היה קשה לתרגם שורטקודים מסוג זה, אך כעת ניתן לעשות זאת בכמה שלבים פשוטים.
1. הוסף את השורטקוד לקובץ wpml-config.xml שלך.
אם אין לך קובץ כזה או שאינך מכיר אותו, עמוד התיעוד הזה יעזור לך, במיוחד הסעיף תוכן של תוסף בניית עמודים.
בקובץ ה־wpml-config.xml שלך, מלבד הקוד הרגיל שאתה מוסיף עבור שורטקוד, עליך להוסיף גם את התכונות type="area" ו־encoding="urlencoded_json":
שורטקוד של Progress bar
<shortcode>
<tag>vc_progress_bar</tag>
<attributes>
<attribute encoding="allow_html_tags">title</attribute>
<attribute type="area" encoding="urlencoded_json">values</attribute>
</attributes>
</shortcode>2. הוסף את הקוד הבא לקובץ functions.php של ערכת העיצוב שלך.
פונקציית Progress bar
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' ) ) ) {
$string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => true );
} else {
$string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => false );
}
}
}
}
return $string;
}החלק החשוב ביותר בקוד שלעיל נמצא בשורה הבאה:
if ( in_array( $key, array( 'text', 'title', 'features', 'substring', 'btn_text', 'label', 'value', 'y_values' ) ) )
כאן, עליך להוסיף את המפתחות הנכונים שתוכל לקבל ממערך ה־JSON המפוענח. בדוגמה שלנו, הם יהיו label ו־value.
וזהו! כעת, בעורך התרגום, תראה את השדות label ו־value מהשורטקודים האלה, והם יהיו מוכנים לתרגום.

עורך תרגום: "label" ו־"value" זמינים לתרגום