Navigation überspringen

Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.

Problem:
Sie möchten in Ihrer wpml-config.xml-Datei eines individuellen Plugins Metadaten zum Kopieren registrieren, wobei die genaue Bezeichnung des Feldes dynamisch ist. Der Code

<custom-field action="copy">_myprefix_description_*</custom-field>

funktioniert jedoch nicht.
Solution:
Wir empfehlen, den Hook

wpml_config_array

zu verwenden, um dynamische Felder zu registrieren. Hier ist ein Beispiel, wie Sie es implementieren können:

add_filter( 'wpml_config_array', function ( $config ) {<br />    global $wpdb;<br />    $prefix = 'myprefix_description_';<br />    $meta_keys = $wpdb->get_col( $wpdb->prepare(<br />        "SELECT DISTINCT meta_key FROM {$wpdb->postmeta} WHERE meta_key LIKE %s",<br />        $prefix . '%'<br />    ) );<br />    if ( ! isset( $config['wpml-config']['custom-fields'] ) ) {<br />        $config['wpml-config']['custom-fields'] = [];<br />    }<br />    foreach ( $meta_keys as $meta_key ) {<br />        $config['wpml-config']['custom-fields'][] = [<br />            'custom-field' => $meta_key,  // Der Feldname<br />            'action'       => 'copy',     // Aktion (copy, translate, etc.)<br />        ];<br />    }<br />    return $config;<br />});

Weitere Informationen und Beispiele finden Sie in unserer Dokumentation und diesem Code-Snippet.
Falls Sie Unterstützung benötigen, empfehlen wir die Zusammenarbeit mit einem unserer zertifizierten WPML-Partner: https://wpml.org/contractors/.

Bitte beachten Sie, dass diese Lösung möglicherweise veraltet oder nicht auf Ihren Fall zutreffend ist. Wir empfehlen, die bekannten Probleme zu überprüfen, die Version der dauerhaften Lösung zu bestätigen und sicherzustellen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben. Falls weiterhin Probleme auftreten, zögern Sie nicht, ein neues Support-Ticket zu eröffnen.

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 antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Schlagwörter: 

Dieses Thema enthält 7 Antworten, hat 0 Stimmen.

Zuletzt aktualisiert von cons-2 Vor 4 Wochen.

Assistiert von: Bruno Kos.

Verfasser Beiträge
Februar 27, 2025 unter 11:45 am #16755681

cons-2

Hintergrund des Themas:
Ich möchte in meiner wpml-config.xml-Datei eines individuellen Plugins Metadaten zum Kopieren registrieren. Beispiel: <custom-field action="copy">_myprefix_description_*</custom-field>. Die genaue Bezeichnung des Feldes ist dynamisch.

Die Symptome:
Der oben gezeigte Code scheint nicht zu funktionieren.

Fragen:
Wie kriegen wir das Problem gelöst?

Februar 28, 2025 unter 9:40 am #16759846

Bruno Kos
Unterstützer

Sprachen: Englisch (English ) Deutsch (Deutsch ) Französisch (Français )

Zeitzone: Europe/Zagreb (GMT+02:00)

Hallo,

Sie haben also folgendes hinzugefügt:

  
<wpml-config>
  <custom-fields>
    <custom-field action="copy">_myprefix_description_*</custom-field>
  </custom-fields>
</wpml-config>

Dennoch wird in der String Übersetzung nichts angezeigt, selbst wenn Sie beispielsweise neue Metadaten zum Plugin oder zu der entsprechenden Datenquelle hinzufügen? Es werden keinerlei neue Einträge registriert?

März 3, 2025 unter 4:32 pm #16770029

cons-2

Korrekt.

Mit den WPML docs konnte ich nicht herausfinden, ob wildcards (*) überhaupt mit für custom-field funktionieren oder nicht.

Ist denn die wildcard-Syntax überhaupt verwertbar für WPML?

<custom-field action="copy">_myprefix_description_*</custom-field>
März 4, 2025 unter 10:49 am #16773214

Bruno Kos
Unterstützer

Sprachen: Englisch (English ) Deutsch (Deutsch ) Französisch (Français )

Zeitzone: Europe/Zagreb (GMT+02:00)

Nach Rücksprache mit unseren Entwicklern haben sie bestätigt, dass dies leider nicht für benutzerdefinierte Felder funktioniert. Es ist jedoch möglich, dies mit dem folgenden Ansatz umzusetzen:

Dokumentation: https://wpml.org/documentation/support/language-configuration-files/custom-fields-translation-options/#wildcards

Sie können versuchen, den Hook `wpml_config_array` zu nutzen. Hier ist ein Beispiel:

add_filter( 'wpml_config_array', function ( $config ) {
    global $wpdb;

    // Präfix für benutzerdefinierte Felder definieren
    $prefix = 'myprefix_description_';

    // Alle passenden Meta-Schlüssel abrufen
    $meta_keys = $wpdb->get_col( $wpdb->prepare(
        "SELECT DISTINCT meta_key FROM {$wpdb->postmeta} WHERE meta_key LIKE %s",
        $prefix . '%'
    ) );

    // Sicherstellen, dass das `custom-fields`-Array existiert
    if ( ! isset( $config['wpml-config']['custom-fields'] ) ) {
        $config['wpml-config']['custom-fields'] = [];
    }

    // Passende Felder dynamisch hinzufügen
    foreach ( $meta_keys as $meta_key ) {
        $config['wpml-config']['custom-fields'][] = [
            'custom-field' => $meta_key,  // Der Feldname
            'action'       => 'copy',     // Aktion (copy, translate, etc.)
        ];
    }

    return $config;
});

Zusätzlich gibt es hier einen nützlichen Code-Schnipsel:
Code-Snippet: versteckter Link

Wir stellen einen Hook zur Verfügung. Sie können die Struktur des Arrays, das dieser Hook zurückgibt, untersuchen und entsprechend weitere benutzerdefinierte Felder hinzufügen.

Bitte beachten Sie, dass dies nicht offiziell dokumentiert ist, da es nur selten von unseren Kunden genutzt wird. Falls Sie Unterstützung bei der Implementierung benötigen, empfehlen wir die Zusammenarbeit mit einem unserer zertifizierten WPML-Partner: https://wpml.org/contractors/

März 4, 2025 unter 1:24 pm #16774346

cons-2

Hallo Bruno,

danke für deine Hilfe.

Das sieht gut aus.
Wir könnten das gebrauchen.

Wann wird der Filter wpml_config_array von WPML angewendet?
Also ich meine z.B.
- nur nach einer Plugin-Installation / Plugin-Update-
bei jedem Seitenaufruf,
- alle x Stunden (cache mit transient)
- etc.

Oder müssen wir eine separate Funktion aufrufen, um einen möglicherweise existierenden wpml-config cache zu löschen, damit das wpml_config_array forciert neu erstellt wird?

März 4, 2025 unter 1:44 pm #16774433

Bruno Kos
Unterstützer

Sprachen: Englisch (English ) Deutsch (Deutsch ) Französisch (Français )

Zeitzone: Europe/Zagreb (GMT+02:00)

Der Filter wpml_config_array in WPML wird dynamisch jedes Mal angewendet, wenn WPML die Konfigurationseinstellungen für Plugins oder Themes mit Mehrsprachigkeitsfunktionen lädt. Er wird nicht dauerhaft zwischengespeichert, sondern immer dann ausgewertet, wenn WPML mehrsprachige Konfigurationen verarbeitet – unabhängig von Plugin-Updates oder festen Zeitintervallen.

März 4, 2025 unter 3:24 pm #16774915

cons-2

Du schreibst:
Der Filter wpml_config_array in WPML wird dynamisch jedes Mal angewendet, wenn WPML die Konfigurationseinstellungen für Plugins oder Themes mit Mehrsprachigkeitsfunktionen lädt.

Was heißt das konkret? Ist das bei jedem Seitenaufruf einmal zu beginn?
Sorry, wenn ich hier so sehr löchere.
Ich frage, weil wir diese Funktion künftig ggf. öfters brauchen könnten.
Versuche herauszufinden, wie sie zuverlässig eingesetzt werden kann.

Wenn ich im Code stöbere, finde ich WPML_Config::load_config().
Der Variable $white_list_pages ist zu entnehmen, dass die config immer aktualisiert wird, wenn man die Admin-Seite themes.php oder plugins.php aufruft.
Also Design » Themes und Plugins » Installierte Plugins.

Zudem einige WPML-Einstellungsseiten.

Wenn ich Plugins » Installierte Plugins aufrufe, dann wird die WPML config einmal aktualisiert.
Ist das korrekt?

Wenn ja, dann wäre unser Problem behoben und wir wissen, was wir programmieren müssen, um das Thema zu lösen.
Das Ticket kann in diesem Fall geschlossen werden.

März 5, 2025 unter 10:07 am #16777693

Bruno Kos
Unterstützer

Sprachen: Englisch (English ) Deutsch (Deutsch ) Französisch (Français )

Zeitzone: Europe/Zagreb (GMT+02:00)

Der Filter wpml_config_array in WPML wird dynamisch angewendet, wenn WPML die Konfigurationseinstellungen für Plugins oder Themes mit Mehrsprachigkeitsunterstützung lädt.

Das bedeutet, dass die Konfiguration jedes Mal aktualisiert wird, wenn WPML feststellt, dass diese Einstellungen geladen oder aktualisiert werden müssen. Basierend auf Ihrer Analyse von WPML_Config::load_config() scheint die Konfiguration insbesondere dann aktualisiert zu werden, wenn bestimmte Admin-Seiten aufgerufen werden, wie z. B. Design » Themes und Plugins » Installierte Plugins, sowie einige WPML-Einstellungsseiten.

Falls Ihre Tests bestätigen, dass das Öffnen von Plugins » Installierte Plugins zuverlässig die Konfigurationsaktualisierung auslöst, ist Ihre Annahme korrekt. In diesem Fall können Sie entsprechend programmieren, und dies sollte Ihr Problem lösen.

Lassen Sie mich wissen, falls Sie weitere Klarstellungen benötigen. Andernfalls können wir das Ticket schließen.

März 7, 2025 unter 8:56 am #16786701

cons-2

Danke für die Info. Das Ticket wurde sehr hilfreich gelöst.