Tovább a tartalomhoz

URL-kódolt shortcode-ok fordítása

Hogyan teheted fordíthatóvá az URL-kódolt, JSON-t tartalmazó shortcode-ok szövegeit, például a WPBakery Progress Bar elemét.

Egyes témák és bővítmények URL-kódolt shortcode-okat használnak. Ilyen például a WPBakery Page Builder Progress Bar, Round Chart és Line Chart modulja. Ez a fejezet azt mutatja meg, hogyan fordíthatók az ilyen shortcode-ok szövegei.

Ha beszúrsz egy ilyen elemet, és a szerkesztőt szöveges (Text) módra váltod, a shortcode így néz ki:

[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="%"]

A values érték URL-dekódolás után JSON-tömb:

[{"label":"Development Test","value":"90"},{"label":"Design Test","value":"80"},{"label":"Marketing","value":"70","color":"bar_blue"}]

A JSON dekódolása után PHP-tömb lesz belőle:

array (
0 => array ( 'label' => 'Development Test', 'value' => '90' ),
1 => array ( 'label' => 'Design Test', 'value' => '80' ),
2 => array ( 'label' => 'Marketing', 'value' => '70', 'color' => 'bar_blue' ),
)

Ez belső folyamat, neked nem kell beavatkoznod.

A szöveges mezők (itt a label és a value) két lépésben válnak fordíthatóvá.

  1. Add a shortcode-ot a wpml-config.xml fájlhoz. A szokásos shortcode-bejegyzés mellett add meg a type="area" és az encoding="urlencoded_json" attribútumot is a kódolt mezőnél:
<shortcode>
<tag>vc_progress_bar</tag>
<attributes>
<attribute encoding="allow_html_tags">title</attribute>
<attribute type="area" encoding="urlencoded_json">values</attribute>
</attributes>
</shortcode>
  1. Add a következő kódot a témád functions.php fájljához.
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;
}

A kód legfontosabb sora az in_array( $key, array( ... ) ) feltétel. Ide azokat a kulcsokat kell felvenned, amelyek a dekódolt JSON-tömbben szerepelnek, és fordítani akarod őket. A példában ez a label és a value.

Ezután a fordítószerkesztőben megjelennek a shortcode-ok label és value mezői, és fordíthatók. A wpml-config.xml fájlról a nyelvi konfigurációs fájl fejezetben, az oldalépítő-tartalom regisztrálásáról az Oldalépítő-tartalom regisztrálása fejezetben olvashatsz.

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások