فیلد تشخیص صحت کد ملی در ووکامرس
- ۲۳ بهمن ۱۴۰۲
- بدون نظر
- فانکشن های ووکامرس
- گزارش خطا
فانکشن 21:
در صورتی که میخواید یه فیلد تحت عنوان کد ملی به فروشگاه وردپرسی خودتون اضافه کنید، میتونید از فانکشن زیر کمک بگیرید.
دقت کنید که این فانکشن فقط صحت ساختاری کد ملی رو بررسی میکنه. به عبارت بهتر با استفاده از این فانکشن، صرفا تعداد ارقام بررسی نمیشه بلکه صحت کد ملی هم چک میشه.
نحوه استفاده: کد زیر رو انتهای فایل function.php یا functions.php قالب فعال تون قرار بدید.
اگر میخواید اولویت نمایش فیلد رو خودتون تعیین کنید، داخل فانکشن خط 25 میتونید مقدار مورد نظرتون رو به صورت عددی ست کنید.
نکته:
تشخیص مالکیت کد ملی، نیازمند مجوز و API بررسی صحت کد ملی با مشخصات فردی هست.
// The function of checking the accuracy of the national code
function check_national_code($code) {
if (!preg_match('/^[0-9]{10}$/', $code))
return false;
for ($i = 0; $i < 10; $i++)
if (preg_match('/^' . $i . '{10}$/', $code))
return false;
for ($i = 0, $sum = 0; $i < 9; $i++)
$sum += ((10 - $i) * intval(substr($code, $i, 1)));
$ret = $sum % 11;
$parity = intval(substr($code, 9, 1));
if (($ret < 2 && $ret == $parity) || ($ret >= 2 && $ret == 11 - $parity))
return true;
return false;
}
// Adding national code field to WooCommerce Checkout page
function add_custom_national_code_field($checkout_fields) {
$checkout_fields['billing']['billing_national_code'] = array(
'type' => 'text',
'label' => __('کد ملی', 'your-theme-domain'),
'required' => true,
'class' => array('form-row-wide'),
'priority' => 1, // Set the priority value to 1 to make it the first field
);
return $checkout_fields;
}
add_filter('woocommerce_checkout_fields', 'add_custom_national_code_field', 10, 1);
// Validate national code field
function validate_custom_national_code_field() {
$code = isset($_POST['billing_national_code']) ? sanitize_text_field($_POST['billing_national_code']) : '';
if (!empty($code) && !check_national_code($code)) {
wc_add_notice(__('کد ملی وارد شده معتبر نمی باشد!'), 'error');
}
}
add_action('woocommerce_checkout_process', 'validate_custom_national_code_field');
// Saved national code in the order
function save_custom_national_code_field($order_id) {
if (!empty($_POST['billing_national_code'])) {
update_post_meta($order_id, 'billing_national_code', sanitize_text_field($_POST['billing_national_code']));
}
}
add_action('woocommerce_checkout_update_order_meta', 'save_custom_national_code_field');
// Display the national code in the orders section of the admin
function checkout_field_display_admin_order_meta($order) {
echo '' . __('کد ملی') . ': ' . get_post_meta($order->id, 'billing_national_code', true) . '
';
}
add_action('woocommerce_admin_order_data_after_billing_address', 'checkout_field_display_admin_order_meta', 10, 1);
اشتراک گذاری فانکشن: