×

افزودن فیلد کد ملی در فرم پرداخت

وردپرس حسام خوشگو 22 مهر 1399
کد ملی در فرم پرداخت ووکامرس

یکی از مشکلاتی که فروشگاه های اینترنتی جدیدا دچار هستند احراز هویت کاربرانشون هست که نیاز به احراز هویت اطلاعاتی مانند کد ملی دارند در این آموزش می‌تونید فیلد کد ملی با امکان اعتبار سنجی را به فرم پرداخت ووکامرس اصافه کنید

افزودن فیلد کدملی به فرم پرداخت

خب در مرحله اول شما باید یک فیلد با نام کد ملی به فرم پرداختتون اضافه کنید که میتونید بدون استفاده از افزونه این کار و انجام بدین فقط کافیه کد زیر در فایل fucntions.php قالبتون اضافه کنید

add_filter('woocommerce_checkout_fields', 'custom_woocommerce_billing_fields');
 
function custom_woocommerce_billing_fields($fields)
{
    $fields['billing']['billing_ncode'] = array(
        'label' =>'کد ملی',
        'placeholder' =>'کد ملی',
        'required' => true,
        'clear' => false, 
        'type' => 'text',
        
    );
 
    return $fields;
} 

اعتبار سنجی کدملی در فرم پرداخت

خب حالا یک فیلد با نام کد ملی به فرم پرداخت اضافه شد

حالا باید یک امکانی اضافه کنیم که درستی کد ملی وارد شده را مورد سنجش قرار دهد

با اضافه کردن کد زیر در همان فایل fucntions.php

مقدار ورودی فیلد کد ملی را بررسی می‌کند و اگر کد ملی نادرست وارد شود اخطاری به کاربر نمایش داده میشود.

add_action('woocommerce_checkout_process', 'wh_phoneValidateCheckoutFields');

function wh_phoneValidateCheckoutFields() {
    $billing_ncode = filter_input(INPUT_POST, 'billing_ncode');


 if(!preg_match('/^[0-9]{10}$/',$billing_ncode))
        wc_add_notice(__('  کدملی وارد شده کمتر از ده رقم می‌باشد, لطفا کد ملی را صحیح وارد نمایید '), 'error');

    for($i=0;$i<10;$i++)
        if(preg_match('/^'.$i.'{10}$/',$billing_ncode))
       wc_add_notice(__('  کدملی نامعتبر میباشد , لطفا کد ملی را صحیح وارد نمایید .'), 'error');
    for($i=0,$sum=0;$i<9;$i++)
        $sum+=((10-$i)*intval(substr($billing_ncode, $i,1)));
    $ret=$sum%11;
    $parity=intval(substr($billing_ncode, 9,1));
    if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity))
        return true;
       wc_add_notice(__(' کدملی نامعتبر میباشد , لطفا کد ملی را صحیح وارد نمایید .'), 'error');


    
} 

با اضافه کردن هردو تکه کد بالا مشاهده می کنید که فیلد کدملی با قدرت بسیار  بالای سنجش صحیح بودن کد ملی وارد شده به فرم پرداخت وب سایت شما اضافه می شود

 

ذخیره کدملی وارد شده

حالا باید کد ملی وارد شده را در دیتابیس ذخیره نماییم

با استفاده از کد زیر همانطور که مشاهده میکنید یک فیلد به جدول post_meta اضافه می‌شود که حاوی کد ملی (biling_code) می‌باشد

add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['billing_ncode'] ) ) {
        update_post_meta( $order_id, 'billing_ncode', sanitize_text_field( $_POST['billing_ncode'] ) );
    }
} 

نمایش کد ملی در سفارش

با استفاده از کد زیر می‌تونید کد ملی وارد شده را در قسمت سفارشات هر کاربر مشاهده کنید

add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('کد ملی').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_ncode', true ) . '</p>';
} 

ودر نهایت می‌تونید از کد کامل شده زیر استفاده کنید

// code melli
add_filter('woocommerce_checkout_fields', 'custom_woocommerce_billing_fields');
 
function custom_woocommerce_billing_fields($fields)
{
    $fields['billing']['billing_ncode'] = array(
        'label' =>'کد ملی',
        'placeholder' =>'کد ملی',
        'required' => true,
        'clear' => false, 
        'type' => 'text',
        
    );
 
    return $fields;
}

add_action('woocommerce_checkout_process', 'wh_phoneValidateCheckoutFields');

function wh_phoneValidateCheckoutFields() {
    $billing_ncode = filter_input(INPUT_POST, 'billing_ncode');


 if(!preg_match('/^[0-9]{10}$/',$billing_ncode))
        wc_add_notice(__('  کدملی وارد شده کمتر از ده رقم می‌باشد, لطفا کد ملی را صحیح وارد نمایید '), 'error');

    for($i=0;$i<10;$i++)
        if(preg_match('/^'.$i.'{10}$/',$billing_ncode))
       wc_add_notice(__('  کدملی نامعتبر میباشد , لطفا کد ملی را صحیح وارد نمایید .'), 'error');
    for($i=0,$sum=0;$i<9;$i++)
        $sum+=((10-$i)*intval(substr($billing_ncode, $i,1)));
    $ret=$sum%11;
    $parity=intval(substr($billing_ncode, 9,1));
    if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity))
        return true;
       wc_add_notice(__(' کدملی نامعتبر میباشد , لطفا کد ملی را صحیح وارد نمایید .'), 'error');


    
}
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['billing_ncode'] ) ) {
        update_post_meta( $order_id, 'billing_ncode', sanitize_text_field( $_POST['billing_ncode'] ) );
    }
}



add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('کد ملی').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_ncode', true ) . '</p>';
}

//code melli 
حسام خوشگو

حسام خوشگو

برنامه نویس وب و وردپرس، علاقه مند به مباحث سئو و بهینه سازی وب سایت محقق سئو کار در حوزه برنامه نویسی و سئو ، الان نزدیک ۶ ساله که عاشق کد نویسی و چالش های سطح وب هستم

۳ پاسخ به “افزودن فیلد کد ملی در فرم پرداخت”

  1. Avatar پیام گفت:

    ببخشید اگه بخوام قسمت کد ملی این کد رو تغییر بدم باید چیکار کنم واین کد بالای شمارو بهش اضافه کنم هرکاری کردم کارنکرد..کد من اطلاعات حقیقی وحقوقی میگیره چجوری میشه فیلد اطلاعات حقوقی بهش اضافه کرد؟شناسه ملی..کد اقتصادی..نام شرکت…https://s16.picofile.com/file/8429909742/New_Text_Document.txt.html این کد منه ولی قسمت کد ملیش درستی وغلطی رو تشخیص نمیده میشه بگین چجوری برای قسمت کد ملیش از کد بالای شما استفاده کنم؟

  2. Avatar کیارش گفت:

    دستتون درد کنه.
    کار من رو به شدت راه انداخت.
    عالی، ممنون.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق مادی و معنوی این وبسایت متعلق به چاوک می باشد و هر گونه کپی برداری پیگرد قانونی دارد.