افزودن فیلد کد ملی به برگه تسویه حساب ووکامرس

[short_link]
توی این پست کدی رو که برای اضافه کردن کد ملی به برگه تسویه حساب ووکامرس نیاز هست رو آماده کردم . این کد به عنوان متادیتای سفارش توی دیتابیس ذخیره میشه و در صفحه جزئیات سفارش هم کد ملی نمایش داده میشه . همینطور اگر خروجی یا همون برون ریزی اکسل بخواید بگیرید می تونید این فیلد رو اضافه کنید و توی فایل اکسل، کدملی کاربران و مشتریان خودتون رو داشته باشید.

راهنمای افزودن فیلد کد ملی به برگه تسویه حساب ووکامرس:

اول از همه با استفاده از تابع woocommerce_form_field میایم یه فیلد جدید در قسمت تسویه حساب ایجاد می کنیم . در مورد تابع ووکامرس در این پست قبلا توضیح داده بودم که می تونید بخونید  : اضافه کردن فیلد جدید در چک اوت ووکامرس

توی این تابع ما تعریف کردیم که این فیلد، ضروری باشه و براش عنوان و نام انتخاب کردیم . در مرحله بعد تعریف کردیم که حتما 10 حرفی باشه و با تابع check_national_code که از قبل تعریف کردیم چک کردیم که کدملی وارد شده طبق الگوریتم کدملی  ،کدملی صحیح و واقعی باشه. برای اینکه چک کنیم که کدملی درست هست و اعتبارسنجی کنیم توی این پست مفصل نوشتم که از دست ندید :اعتبارسنجی کدملی با استفاده از php

در صورتی که تمام شرط هایی که گذاشتیم درست بود به مرحله بعد و پرداخت میره در غیر اینصورت ارور متناظر رو که با تابع wc_add_notice که براش تعریف کردیم نمایش خواهد داد .

در نهایت این کدملی با مقدار national_code به عنوان پست متا در جدول post_meta  ذخیره میشه و  در هر جایی نیاز بود قابل نمایش هست.

 

<?php
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 &amp;&amp; $ret==$parity) || ($ret>=2 &amp;&amp; $ret==11-$parity)){
         return true;} else {
    return false;}
}
/**
 * Add the field to the checkout
 */
add_action( 'woocommerce_before_order_notes', 'national_code_field' );
function national_code_field( $checkout ) {
    echo '<div id="national_code_field"><h2>کد ملی</h2>';
    woocommerce_form_field( 'national_code', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => 'کدملی خود را وارد کنید',
        'placeholder'   => 'کدملی ... ',
        'required' => true,
        'validate' => array(), 
        ), $checkout->get_value( 'national_code' ));
    echo '</div>';
}
/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'national_code_field_process');
function national_code_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['national_code'] ) {
        wc_add_notice('فیلد کد ملی نمی تواند خالی باشد.' , 'error' );}
        else
        {
          // Validates a phone number using a regular expression.
        if ( 10 != strlen( $_POST['national_code'] ) ) {
            wc_add_notice( 'کدملی باید   10 کاراکتری باشد', 'error' );
        } else {
          $n_code=$_POST['national_code'];
          $res=check_national_code($n_code);
if($res!=1)
wc_add_notice( 'کدملی وارد شده صحیح نمی‌باشد', 'error' );
        }}  
}
/**
 * Update the order meta with field value
 */
add_action( 'woocommerce_checkout_update_order_meta', 'national_code_field_update_order_meta' );
function national_code_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['national_code'] ) ) {
        update_post_meta( $order_id, 'national_code', sanitize_text_field( $_POST['national_code'] ) );
    }
}
/**
 * Display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'national_code_field_display_admin_order_meta', 10, 1 );
function national_code_field_display_admin_order_meta($order){
    echo '<p><strong> کدملی :</strong> ' . get_post_meta( $order->id, 'national_code', true ) . '</p>';
}

چنانچه تمایل داشته باشید می تونیم این ویرایش و تغییرات رو با یک هزینه جزئی براتون انجام بدیم و این فیلد رو به فروشگاه شما اضافه کنیم. کافیه به تلگرام  skarimeh  پیام بدید و یا باشماره 09359556950  تماس بگیرید تا برای انجام این کار با شما هماهنگی لازم صورت بگیره.

 

(3) دیدگاه برای این پست ثبت شده
دیدگاه خود را بفرستید
  1. رها
    #1 | سه شنبه 1401/03/24 [11:01 ق.ظ]

    سلام
    این کد خیلی عالی کار میکنه و دقت بالایی داره ، یعنی ارزیابی و شناسایی کد ملی رو خیلی درست انجامش میده ، از شما ممنونم ، لطفا بگید که چطوری این فیلد کد ملی رو در پنل کاربران هم داشته باشیم؟ یعنی همه کاربرها داخل پروفایلشون اینو داشته باشن ؟
    من چیزی پیدا نکردم براش

    خیلی ممنون از شما بابت این کد شفاف و تمیز

  2. مهدی
    #2 | چهارشنبه 1402/06/22 [04:57 ق.ظ]

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

    • جمعه 1402/06/24 [12:16 ب.ظ] | #3

      با تشکر از یادآوری و تذکر شما.
      کدها اصلاح و تست شدند .
      می تونید استفاده بفرمایید. هر زمان نیاز به کمک و راهنمایی داشتید می تونید تلگرام به آی دی skarimeh پبام بدید

« اعتبارسنجی کدملی با استفاده از php
اضافه کردن فیلد جدید در چک اوت ووکامرس »