WooCommerce bietet auf der Kasse-Seite die Möglichkeit, eine alternative Lieferadresse zu hinterlegen. Die entsprechenden Felder werden durch ein Häkchen durch den Kunden ein- bzw. ausgeblendet.
Die Felder sollten standardmäßig nicht eingeblendet werden
Ich empfehle in der Regel, diese Felder standardmäßig auszublenden. Das bedeutet, Kunden müssen den Haken aktiv selbst setzen, um eine Alternative Lieferadresse zu hinterlegen. Denn: Die Felder verlängern den Checkout-Prozess unnötig. Jede Sekunde längerer Checkout bedeutet eine höhere Abbruch-Quote - und das bedeutet weniger Umsatz. Wie das geht, habe ich in einem anderen Artikel zur Alternativen Lieferadresse zusammengefasst.
Problem: Bei registrierten Kunden mit hinterlegter Lieferadresse mit Kundenkonto wird der Haken nicht automatisch gesetzt
Bei dieser Konstellation kann es aber zu folgendem Problem kommen: Kunden können sich meistens ein Kundenkonto anlegen. Im Kundenkonto selbst kann eine Lieferadresse hinterlegt werden. Wenn diese Kunden jetzt den Checkout-Prozess öffnen, dann ist die Alternative Lieferadresse aber dennoch nicht gesetzt (und damit landet die Bestellung im Zweifel bei der Rechungsadresse, obwohl eine Alternative Lieferadresse im Konto hinterlegt ist).
Damit die Felder nur bei Kunden mit Konto mit alternativer Lieferadresse ausgefüllt werden, kann folgendes Code-Snippet verwendet werden:
function is_different_address_available_for_logged_in_users() {
if ( is_user_logged_in() ) {
$user_id = get_current_user_id();
// Get the customer shipping address
$shipping_first_name = get_user_meta($user_id, 'shipping_first_name', true);
$shipping_last_name = get_user_meta($user_id, 'shipping_last_name', true);
$shipping_address_1 = get_user_meta($user_id, 'shipping_address_1', true);
// If any of the shipping fields are set, we consider the shipping address as set
if ( !empty( $shipping_first_name ) || !empty( $shipping_last_name ) || !empty( $shipping_address_1 ) ) {
return true; // Auto-check the "Ship to a different address" checkbox
}
}
return false;
}
add_filter( 'woocommerce_ship_to_different_address_checked', 'custom_code_ship_to_different_address' );
function custom_code_ship_to_different_address() {
if( is_different_address_available_for_logged_in_users() ) {
return true;
}
return false;
}
?>
Problem gelöst!