[Gelöst] Automatische Vergabe der Berechtigung für alle Sprachen an alle Nutzer
Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.
Problem: Sie möchten, dass alle in WordPress registrierten Benutzer automatisch die Berechtigung erhalten, Übersetzungen für alle Sprachversionen anzulegen und zu verwalten, ohne dass dies manuell jedem Nutzer zugewiesen werden muss. Sie haben bereits versucht, die Berechtigungen an WordPress Rollen zu koppeln, aber die Nutzer können immer noch keine Übersetzungen vornehmen. Solution: Wenn Sie möchten, dass nicht-administrative Benutzer ähnliche Berechtigungen wie ein Admin erhalten, um Übersetzungen durchführen zu können, müssen Sie ihnen die WordPress-Capability
manage_options
zuweisen. Beachten Sie jedoch, dass dies ihnen Zugriff auf alle Optionen in WordPress gibt. Eine programmatische Zuweisung von Rollen und Berechtigungen kann durch das Hinzufügen eines Code-Snippets in der functions.php Ihres Themes oder einem Code Snippet Plugin erfolgen. Hier ist ein Beispiel, wie Sie Benutzer als Übersetzungsmanager und Übersetzer hinzufügen können:
/* Any users apart from Admins or Subscribers will be Translation Managers and Translators. */
function wpml_custom_assign_capability() {
$users = get_users();
foreach ( $users as $user ) {
if ( ! in_array( 'subscriber', $user->roles ) && ! in_array( 'admin', $user->roles )) {
// add as translation manager
$user->add_cap( 'wpml_manage_translation_management' );
// add as translator
$user->add_cap( 'translate' );
}
}
}
Nachdem Sie dieses Snippet hinzugefügt und das Backend neu geladen haben, sollten die Rollen entsprechend angepasst sein. Entfernen Sie das Snippet danach wieder. Für weitere Details zur Verwaltung von WPML-Berechtigungen, besuchen Sie bitte die WPML-Dokumentation. Wenn diese Lösung nicht relevant ist oder veraltet erscheint, empfehlen wir Ihnen, ein neues Support-Ticket zu öffnen. Wir empfehlen auch, die Seite mit bekannten Problemen (https://wpml.org/known-issues/) zu überprüfen, die Version der dauerhaften Lösung zu verifizieren und zu bestätigen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben.
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.
Background of the issue:
Ich möchte, dass alle in WordPress registrierten Benutzer automatisch die Berechtigung erhalten, Übersetzungen für alle Sprachversionen anzulegen und einzupflegen. Dies sollte nicht manuell jedem Nutzer zugewiesen werden, sondern automatisch erfolgen. Eine Möglichkeit wäre, es an WordPress Rollen zu koppeln.
Symptoms:
Die bisherige Recherche zu möglichen Lösungsansätzen war nicht erfolgreich.
Questions:
Wie kann ich die automatische Vergabe von Berechtigungen für alle Sprachversionen an alle Nutzer in WordPress umsetzen?
Gibt es eine Möglichkeit, die Berechtigungen an WordPress Rollen zu koppeln?
Alle Rollen, die nicht auf Admin zutreffen, haben eingeschränkte Zugriffsrechte und können unter WPML > Übersetzungs-Dashboard > Übersetzer eingetragen werden, um als Übersetzer Jobs unter WPML > Übersetzungen abrufen zu können oder um als Übersetzungs-Manager Jobs zu erstellen und zuzuweisen.
Nutzer die nicht Admin sind, können die Übersetzungen nicht direkt in den Seiten- oder Beitragslisten oder vom WordPress-Editor aus abgrufen.
Um Nutzern, die nicht Admin sind, die gleichen Möglichkeiten wie einem Admin zu ermöglichen, muss die WordPress-Capability manage_options gegeben sein, aber das würde ebenfalls bedeuten, dass diese Nutzer dann Zugriff auf alle Optionen in WordPress haben.
Die programmatische Zuweisung von Rollen wäre wie folgt technisch möglich:
Vielen Dank für die Rückmeldung. Diese Lösung hatten wir bereits getestet, die Capability wird den Benutzern dadurch auch wie gewünscht zugeordnet. Allerdings führt dies nicht dazu,dass sie Übersetzungen vornehmen dürfen.
Fehlen hier noch weitere Berechtigungen auf Sprachebene / was müssten wir zusätzlich den Benutzern noch zuordnen?
Ein Übersetzungmanager, der kein Adminkonto hat, kann unter WPML > Translation Dashboard Aufträge erstellen, welche dann unter WPML > Übersetzungen aufgerufen werden können.
Der Übersetzungsmanager kann sich diese Aufträge auch selbst zuweisen.
Wir haben die Seite geprüft, und mit Nutzerberechtigung sehen wir leider keine Option eine Übersetzung als Job zu erfassen.
Wichtiger ist uns auch die Berechtigung, von einer Seite / einem Beitrag aus diese für eine andere Sprachversion zu kopieren und dann in dieser Sprachversion die Übersetzugen eintragen zu können.
Anbei zwei Screenshots, einmal vom Translation Job view und einmal von der Stelle im Dokument, an der wir gerne die Übersetzung der Seite initiieren möchten - das "Plus" sollte nicht disabled sein sondern die Anlage ermöglichen, dieselbe Funktion gibt es natürlich auch auf der Seite selbst, mit demselben Verhalten.
Die Berechtigung, von einer Seite / einem Beitrag aus ist nur für Admins möglich, bzw. kann nur dann ermöglicht werden, wenn die Nutzer die WordPress Capability "manage_options" haben.
Vielen Dank, dadurch werden User nun als Translator hinzugefügt. Sobald sie sich dann selbst eine Sprache hinzufügen, können sie auch Dokumente für die entsprechende Sprachversion zur Übersetzung kopieren.
Die letzte offene Frage wäre dann noch, ob man die Sprachversionen selbst auch noch automatisch zuweisen könnte. Ein Versuch über eine Funktion wpml_add_user_as_translator schlägt fehl, weil es diese offenbar nicht gibt.
Unser aktuelles Code-Beispiel sieht wie folgt aus:
public function updateUserCaps($user_login, $user) {
$backend_roles = ['redakteur', 'nutzer'];
$user_roles = $user->roles ?? [];
Es handelt sich um Metainformation auf der wp_usermeta Tabelle.
Man kann in diese mit Standard-WordPress-Methoden eingreifen.
Beispiel:
/**
* Hook to assign WPML language pairs to translators.
* Add this to your theme's functions.php
*/
add_action( 'init', function() {
// Only run if WPML is active
if ( ! class_exists( 'SitePress' ) ) {
return;
}
// Example: assign English -> German and German -> English
$user_id = 123; // Replace with the WordPress user ID of your translator
// Fetch existing pairs
$pairs = get_user_meta( $user_id, 'wp_language_pairs', true );
// If empty or not an array, initialize
if ( empty( $pairs ) || ! is_array( $pairs ) ) {
$pairs = [];
}
// Add English -> German
if ( ! isset( $pairs['en']['de'] ) ) {
$pairs['en']['de'] = 1;
}
// Add German -> English
if ( ! isset( $pairs['de']['en'] ) ) {
$pairs['de']['en'] = 1;
}
// Save back (WPML expects serialized array)
update_user_meta( $user_id, 'wp_language_pairs', $pairs );
});
Diese WordPress-Hook, kann in die functions.php des Themes oder einem Code Snippet Plugin eingefügt werden, um Übersetzern programmatisch WPML-Sprachpaare zuzuweisen. Dieser Hook bewirkt Folgendes:
- Sie wird nur ausgeführt, wenn WPML (SitePress) aktiviert ist.
- Sie liest die Benutzermetadaten wp_language_pairs sicher.
- Sie fügt Sprachpaare hinzu oder aktualisiert sie.
- Sie serialisieren den Array zurück in das von WPML erwartete Format.
Unter $user_id = 123; muss die ID des Benutzers eingegeben werden.
Der Code beim erneuten Laden das Backends ausgeführt und sollte danach entfernt werden.