Zum Inhalt springen Zur Seitenleiste springen

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

Problem:
Sie möchten das Individuell-Feld "wpml_language" in Ihrer function.php so anpassen, dass es basierend auf dem Lieferland und nicht auf der beim Checkout gewählten Sprache gesetzt wird.
Solution:
Wir empfehlen, keine Anpassungen vorzunehmen, die die Funktionsweise von WPML beeinflussen könnten. Sollten Sie dennoch Änderungen vornehmen, übernehmen wir keine Verantwortung dafür. Hier ist ein Code-Snippet, das Ihnen helfen könnte:

add_action('woocommerce_checkout_process', 'set_wpml_language_based_on_shipping_country');
function set_wpml_language_based_on_shipping_country() {
// Überprüfen, ob WPML aktiv ist
if (!class_exists('SitePress')) {
return;
}

// Land der Lieferadresse aus dem Checkout-Formular holen
$shipping_country = isset($_POST['shipping_country']) ? sanitize_text_field($_POST['shipping_country']) : '';

// Mapping von Ländern zu Sprachen
$country_to_lang = [
'DE' => 'de', // Deutschland → Deutsch
'IT' => 'it', // Italien → Italienisch
// Weitere Länder hinzufügen
];

// Standardsprache, falls Land nicht im Mapping enthalten ist
$wpml_language = isset($country_to_lang[$shipping_country])
? $country_to_lang[$shipping_country]
: 'en'; // Standardwert

// WPML-Sprachkontext ändern
global $sitepress;
$sitepress->switch_lang($wpml_language, true);

// Optional: Sprache in den Bestellmetadaten speichern
if (isset($_POST['order_id'])) {
update_post_meta($_POST['order_id'], 'wpml_language', $wpml_language);
}
}

Falls diese Lösung veraltet ist oder nicht auf Ihren Fall zutrifft, empfehlen wir Ihnen, ein neues Support-Ticket zu eröffnen. Überprüfen Sie auch die bekannten Probleme und stellen Sie sicher, dass Sie die neuesten Versionen Ihrer 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.

Schlagwörter: 

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

Zuletzt aktualisiert von kamranN-2 Vor 4 Monaten, 2 Wochen.

Assistiert von: Andreas W..

Autor Beiträge
März 6, 2025 um 2:01 pm #16783871

kamranN-2

Hintergrund des Themas:
Ich möchte die function.php so anpassen, dass bei jeder Bestellung das Individuell-Feld "wpml_language" basierend auf dem Lieferland ergänzt wird. Derzeit hängt es von der beim Checkout ausgewählten Sprache ab. Ich möchte, dass wenn ein Kunde Lieferland Deutschland hat, das Feld wpml_language = "DE" ist, oder bei Italien "EN".

Die Symptome:
Derzeit wird das Individuell-Feld "wpml_language" abhängig von der beim Checkout ausgewählten Sprache gesetzt, nicht basierend auf dem Lieferland.

Fragen:
Wäre es möglich, die function.php so zu ergänzen, dass das Individuell-Feld "wpml_language" basierend auf dem Lieferland ergänzt wird?

März 6, 2025 um 4:45 pm #16784714

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ich kann leider nicht empfehlen in das Feld einzigreifen, da das die Funktionsweise von WPML beeinflussen könnte.

Solltest Du hier Anpassungen vornehmen, dann beachte bitte, dass wir dafür keine Verantwortung nehmen können.

Das folgende Snippet sollte das Problem lösen können:

add_action('woocommerce_checkout_update_order_meta', 'set_wpml_language_based_on_shipping_country', 10, 2);

function set_wpml_language_based_on_shipping_country($order_id, $data) {
    
    $shipping_country = get_post_meta($order_id, '_shipping_country', true);

    $wpml_language = '';

    switch ($shipping_country) {
        case 'DE': // Deutschland
            $wpml_language = 'de';
            break;
        case 'IT': // Italien
            $wpml_language = 'en';
            break;       
        // Weitere Länder hinzufügen, falls nötig
        default:
            $wpml_language = 'en'; // Standardwert
            break;
    }
    
    if ($wpml_language) {
        update_post_meta($order_id, 'wpml_language', $wpml_language);
    }
}
März 6, 2025 um 8:27 pm #16785343

kamranN-2

Leider funktioniert das nicht, nach einem Test ist das weiterhin die Sprache wie in Checkout.

versteckter Link

März 6, 2025 um 8:32 pm #16785354

kamranN-2

add_action('woocommerce_checkout_process', 'set_wpml_language_based_on_shipping_country');
function set_wpml_language_based_on_shipping_country() {
// Überprüfen, ob WPML aktiv ist
if (!class_exists('SitePress')) {
return;
}

// Land der Lieferadresse aus dem Checkout-Formular holen
$shipping_country = isset($_POST['shipping_country']) ? sanitize_text_field($_POST['shipping_country']) : '';

// Mapping von Ländern zu Sprachen
$country_to_lang = [
'DE' => 'de', // Deutschland → Deutsch
'IT' => 'it', // Italien → Italienisch
// Weitere Länder hinzufügen
];

// Standardsprache, falls Land nicht im Mapping enthalten ist
$wpml_language = isset($country_to_lang[$shipping_country])
? $country_to_lang[$shipping_country]
: 'en'; // Standardwert

// WPML-Sprachkontext ändern
global $sitepress;
$sitepress->switch_lang($wpml_language, true);

// Optional: Sprache in den Bestellmetadaten speichern
if (isset($_POST['order_id'])) {
update_post_meta($_POST['order_id'], 'wpml_language', $wpml_language);
}
}