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
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.
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.
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?
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:
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/
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?
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.
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.
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.