Dies ist das technische Support-Forum für WPML - das mehrsprachige WordPress-Plugin.

Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team beantwortet Anfragen im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Our next available supporter will start replying to tickets in about 6.27 hours from now. Thank you for your understanding.

This thread is resolved. Here is a description of the problem and solution.

Problem:
Der Shortcode [cesis-timline] wird in der Übersetzung nicht angezeigt.
Solution:
Dazu musste für diesen Shortcode ein URL Encoding durchgeführt werden. Die Lösung besteht aus 2 Teilen:

#1
Fügen Sie diesen Code bitte in die function.php ihres aktiven Themes:

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', 'heading' ) ) ) {
                    $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => true );
                } else {
                    $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => false );
                }
            }
        }
    }
    return $string;
}

#2 Überschreiben Sie die XML-Konfig unter wp-admin/admin.php?page=wpml-translation-management%2Fmenu%2Fsettings&sm=custom-xml-config

<wpml-config>
    <shortcodes>
        <shortcode>
            <tag>cesis_timeline</tag>
            <attributes>
                <attribute type="area" encoding="urlencoded_json">events</attribute>
            </attributes>
        </shortcode>
    </shortcodes>
</wpml-config>

Relevant Documentation:
https://wpml.org/documentation/support/translating-urlencoded-shortcodes/

This topic contains 19 Antworten, has 2 Teilnehmer.

Last updated by christianH-83 vor 2 Monate, 2 Wochen.

Assigned support staff: Marcel.

Author Artikel
Juli 18, 2019 um 7:30 am #4235665

christianH-83

Wir haben zudem noch ein kleines anderes Problem. Wir nutzen das Cesis Theme, welches nach eigener Aussage mit WPML kompatibel ist. Jedoch scheinen alle Cesis eigenen Bausteine von WPML nicht als Übersetzbar zu gelten. Die Cesis Leute haben bereits ins Staging geschaut, stellen fest, dass es tatsächlich nicht geht und verweisen an euch.
Unter wp-content / themes / cesis / wpml-config.xml wird eines der Problemelemente wohl für WPML deklariert:

        <shortcode>
            <tag>cesis_timeline</tag>
            <attributes>
                <attribute>heading</attribute>
                <attribute>text</attribute>
                <attribute>link</attribute>
            </attributes>
        </shortcode>

Ich selbst weiß nicht, was man an der Stelle machen muss, um Elemente für WPML zu definieren aber laut Cesis sollte das so fertig sein - ist quasi auch die Werkseinstellung.

In der Staging habe ich eine Seite "A Test WPML Timeline Übersetzung" ... ist direkt aufrufbar unter: hidden link ... die hier enthaltenen Inhalte sind über den WPML Übersetzungseditor nicht greifbar und die Frage ist, warum =)

Juli 18, 2019 um 8:13 am #4235939

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Hallo Christian,

Ich habe zuvor die Custom Fields und die Beitragstypen Einstellungen umgestellt, dies löste das Problem nicht. Mir ist dann jedoch aufgefallen, dass die Übersetzung noch in Bearbeitung war.
Ich habe diese nun abgeschlossen und nun funktioniert die Timeline.
hidden link

Freundliche Grüße
Marcel

Juli 18, 2019 um 8:17 am #4235953

christianH-83

Hallo Marcel, das versteh ich jetzt nicht 🙁

Das Problem ist ja, dass die Felder einfach nicht übersetzbar sind ... es sind ja 3 Timeline-Punkte angegeben ... ist englischer Demo-Content. Wenn ich in die Übersetzung gehen will, sehe ich aber nur den Seiten-Titel ... der Content für die Timeline ist einfach gar nicht im Übersetzungseditor aktiv.

Wenn man jetzt in Englisch Lorem Ipsum einfügen könnte, dann wäre das Problem behoben aber aktuell ist Englisch quasi nur eine Kopie von Deutsch (Auch wenn es englischer dummytext ist)

Juli 22, 2019 um 2:10 pm #4258389

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Hallo Christian,

bitte entschuldigen Sie. Ich dachte Sie meinen, dass die Timeline nicht im Frontend angezeigt wird. Dass der Content dupliziert wird ist mir entgangen. Somit fehlt natürlich der Text im Übersetzungseditor.

Ich habe nun die XML Konfig erneut als

<wpml-config>
    <shortcodes>
        <shortcode>
            <tag>cesis_timeline</tag>
            <attributes>
                <attribute>heading</attribute>
                <attribute>text</attribute>
                <attribute>link</attribute>
            </attributes>
        </shortcode>
    </shortcodes>
</wpml-config>

angelegt, jedoch erscheint das Element nach wie vor nicht. Der Shortcode ist zu 100% korrekt.

Können Sie bitte das Theme auf folgender Sandbox Umgebung installieren? hidden link
Dann können wir versuchen das Problem auf dieser isolierten Umgebung nachzustellen. Wenn wir es nachstellen können, kann ich es an unserer Kompatibilitäts-Team weiterleiten, die werden dann Kontakt zum Theme Autor aufnehmen.

Vielen Dank

Freundliche Grüße
Marcel

Juli 22, 2019 um 2:20 pm #4258563

christianH-83

Uff, das Theme habe ich installiert via Upload. Jedoch müsste man es aktivieren, um die notwendigen Zusatzplugins zu laden, welche dann erst die besagten Content-Blöcke hinzufügen.

Beim Cesis Autor gibt es ein Ticketsystem hidden link, bei dem ich zu dem Thema ein privates Ticket laufen habe: #2074167 - aber ich nehme an, da kommt ihr nicht drauf. =(

hidden link

Ich werde bei denen mal auf diesen Thread verweisen, so dass sie vielleicht dort eine Lizenz aktivieren.

Juli 22, 2019 um 2:27 pm #4258697

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Hallo Christian,

Genau, auf deren Ticketsystem haben wir leider keinen Zugang.

Geben Sie mir bitte Bescheid, wenn Sie eine Antwort darauf erhalten oder der Autor sonstige Informationen von uns benötigt.

Freundliche Grüße
Marcel

Juli 22, 2019 um 2:29 pm #4258713

christianH-83

ok, ich habe denen einfach ein Link hierher gegeben + dem Link in die Sandbox ... hoffe mal, die kommen damit zurecht.

Ich melde mich dann ... wenn die sich melden =)

Juli 22, 2019 um 4:20 pm #4259857

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Danke für die Info 🙂

Juli 23, 2019 um 7:31 am #4263315

christianH-83

Hallo Marcel,

WPML Translation of Timeline Module?!
TheFox replied 15 minutes ago
Hello Christian,

We activated the dev mode on their install, they should be able to work do use the theme fully now.

Best regards
Juli 23, 2019 um 7:40 am #4263391

christianH-83

Ich habe in der Sandbox auch direkt mal die Timeline mit auf die Sample Page gelegt ... ich finde nur gerade den WPML-Übersetzungseditor nicht ... er öffnet es immer in einem reinen Textfeld.

Das Theme hat zu dem den WPBakeryPageBuilder und ein eigenes Plugin installiert, wodurch die Contentslots verfügbar sind.

Juli 23, 2019 um 10:08 am #4264943

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Hallo Christian,

vielen Dank. Ich habe dazu den Übersetzungseditor eingestellt.

Das Timeline Module funktioniert auch nicht in der Sandbox. Ich habe den Fall nun an unser Kompatibilitätsteam weitergeleitet. Die werden nach Bestätigung des Problems einen Workaround suchen bzw. den Theme Autor kontaktieren.

Folgendes habe ich zusätzlich überprüft:
- PHP Debugging
- mit WPBakery Builder in Version 6.0.3 getestet

Freundliche Grüße
Marcel

Juli 24, 2019 um 4:01 pm #4276301

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Hallo Christian,

Problem war, dass der Shortcode "urlencoded" war. Folgendes Tutorial erklärt die Lösung.
https://wpml.org/documentation/support/translating-urlencoded-shortcodes/

Die Lösung besteht aus 2 Teilen:

#1
Fügen Sie diesen Code bitte in die function.php ihres aktiven Themes:

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', 'heading' ) ) ) {
                    $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => true );
                } else {
                    $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => false );
                }
            }
        }
    }
    return $string;
}

#2 Überschreiben Sie die XML-Konfig unter wp-admin/admin.php?page=wpml-translation-management%2Fmenu%2Fsettings&sm=custom-xml-config

<wpml-config>
    <shortcodes>
        <shortcode>
            <tag>cesis_timeline</tag>
            <attributes>
                <attribute type="area" encoding="urlencoded_json">events</attribute>
            </attributes>
        </shortcode>
    </shortcodes>
</wpml-config>

Bitte führen Sie diese zwei Schritte aus, dann ist das Problem gelöst 🙂

Freundliche Grüße
Marcel

Juli 25, 2019 um 7:52 am #4280361

christianH-83

Hallo Marcel,

schön dass ihr es bei euch damit beheben konntet. Ich befürchte, dass allein reicht bei uns nicht 🙁

Ich habe das Cesis Child Theme aktiv, so dass ich die Änderungen Updatesicher in die functions.php setzen konnte. Die XML-Anpassung habe ich auch vorgenommen.

Leider sehe ich trotzdem nicht die entsprechenden Fehler, wie es in der Sandbox der Fall ist.
Ich bin jetzt schon ziemlich akkriebisch die Einstellungen von WPML auf der Sandbox durchgegangen und habe sie mit unserer Staging abgeglichen, kann aber leider keinen nennenswerten Unterschied erkennen.

Hast du noch eine Idee, was fehlt? Oder blockiert da irgendein Cache ggfs.? Ich bin nicht so der WordPress-Crack =(

Juli 25, 2019 um 9:05 am #4281155

Marcel
Supporter

Languages: Englisch (English ) Deutsch (Deutsch )

Timezone: Europe/Madrid (GMT+02:00)

Hallo Christian,

Ich habe nun den Testbeitrag (auf Deutsch) erneut abgespeichert, damit die Übersetzung die Aktualisierung bekommt, sowie das Cache (oben in der Topbar) bereinigt, nun hat es geklappt:

Beispiel: hidden link

Freundliche Grüße
Marcel

Juli 25, 2019 um 9:09 am #4281195

christianH-83

Ah OK, das heißt, bei solchen Sachen muss man dann einfach die Originale Seite abspeichern, dass WordPress die Änderungen kapiert.

Dann Teste ich mal weiter.