Hi,
grundsätzlich müsstest du das einfach wie in den herkömmlichen WooCommerce Checkout integrieren/implementieren. Dafür verwendest du z.B. den Hook:
woocommerce_after_checkout_validation
und fügst deine Funktion zur Überprüfung via add_action an.
Grüße
Ich habe in der Datei function.php im Child-Theme folgendes integriert.
Ich habe jedoch checkout_process als Hock verwendet. Wäre after_checkout_validation besser?
add_action( 'woocommerce_checkout_process', 'validate_ean13');
function validate_ean13($post_id) {
$barcode = $_POST['additional_kartennummer'];
if (!preg_match("/^[0-9]{13}$/", $barcode)) {
wc_add_notice( __( 'Die Kartennummer ist zu kurz.'), 'error');
wc_add_notice( __( 'Die Kartennummer muss aus 13 Ziffern bestehen.' ), 'error');
wc_add_notice( __( 'Sie finden die Nummer auf der Rückseite Ihrer Kundenkarte' ), 'error');
wc_add_notice( __( 'Die Kartennummer beginnt mit 109201...'), 'error');
return false;
}
$digits = $barcode;
// 1. Add the values of the digits in the
// even-numbered positions: 2, 4, 6, etc.
$even_sum = $digits[1] + $digits[3] + $digits[5] +
$digits[7] + $digits[9] + $digits[11];
// 2. Multiply this result by 3.
$even_sum_three = $even_sum * 3;
// 3. Add the values of the digits in the
// odd-numbered positions: 1, 3, 5, etc.
$odd_sum = $digits[0] + $digits[2] + $digits[4] +
$digits[6] + $digits[8] + $digits[10];
// 4. Sum the results of steps 2 and 3.
$total_sum = $even_sum_three + $odd_sum;
// 5. The check character is the smallest number which,
// when added to the result in step 4, produces a multiple of 10.
$next_ten = (ceil($total_sum / 10)) * 10;
$check_digit = $next_ten - $total_sum;
// if the check digit and the last digit of the
// barcode are OK return true;
if ($check_digit == $digits[12]) {
return true;
}
wc_add_notice( __( 'Die Kartennummer ist ungültig.'), 'error');
wc_add_notice( __( 'Die Kartennummer muss aus 13 Ziffern bestehen.' ), 'error');
wc_add_notice( __( 'Sie finden die Nummer auf der Rückseite Ihrer Kundenkarte' ), 'error');
wc_add_notice( __( 'Die Kartennummer beginnt mit 109201...'), 'error');
}
Hi,
das ginge denke ich auch. Du müsstest nur mal testen ob das mit der mehrstufigen Kasse dann korrekt funktioniert, d.h. das die Formularfelder entsprechend direkt im ersten Schritt geprüft werden.
Grüße
Tatsächlich klappt es nur so. Benutze ich woocommerce_after_checkout_validation
funktioniert die Validierung nicht.