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

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

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

بعد از اینکه کاربر محصولات مورد نیاز خود را به سبد خرید اضافه کرد و خرید  کاربر به اتمام رسید، با کلیک بر روی دکمه تسویه حساب،  کاربر وارد برگه تسویه حساب می شود.

در برگه تسویه حساب، اطلاعات ضروری کاربر مانند نام و نام خانودگی، آدرس و شماره تماس و کد پستی دریافت می شود و قبل از هدایت کاربر به درگاه بانکی، در دیتابیس سایت ذخیره می شود.

یکی از فیلدهایی که می تواند بسیار مفید و کاربردی باشد فیلد کدملی  هست. یکی از مزایای کد ملی این است که کدملی هر فرد منحصر به فرد و یونیک می باشد و هم می تواند برای سرچ اطلاعات خرید یک مشتری، دریافت گزارش خریدهای یک خریدار ، ارائه تخفیف و دسته بندی مشتریان و … مورد استفاده قرار بگیرد.

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

همونطور که می دانیم کد ملی (National ID) منحصر و از 10 عدد تشکیل شده است و دارای الگوریتم خاصی می باشد که در این پست به آن اشاره شده است  (اعتبارسنجی کدملی)

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

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

اگر هم اعتبارسنجی برای فیلد در نظر گرفته نشده باشد، کاربر می تواند هر  کدملی فیک و ساختگی را وارد کند که منطق اضافه کردن فیلد کدملی را زیرسوال می برد.

 

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

ابتدا  با استفاده از تابع 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>';
}
// add customer id to order in woo database
// karimeh  telegram:@skarimeh
// mobile: 09359556950

دانلود کد اضافه کردن کد ملی به ووکامرس

با اضافه کردن کدهای بالا در فایل functions.php  ، فیلد کد ملی به فیلدهای برگه تسویه حساب اضافه می شود و چون به صورت ضروری تعریف شده است، کاربر ملزم به وارد کردن کدملی می باشد.

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

فیلد کدملی ووکامرس

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

کدملی ترکیبی از 10 عدد می باشد که دارای الگوریتم مشخصی هست. علاوه بر اضافه شدن کد ملی، اعتبارسنجی این فیلد ها اضافه می شود.

یعنی کاربر نمی تواند یک کد ملی فیک و ساختگی را وارد کند و سفارش خود را ثبت کند.

این باعث می شود که تمام سفارشات و خریدهای کاربر همراه با کدملی در دیتابیس ذخیره شود و در زمانی که نیاز است با همین کد ملی ذخیره شده به سایر اطلاعات خرید مشتری دسترسی داشت و یا در زمان چاپ آدرس بسته پستی از کد ملی هم استفاده کرد.

 

نمایش کدملی در بخش ادمین وردپرس

این فیلد کد ملی، در بخش ادمین وردپرس در قسمت جزئیات سفارش نمایش داده می شود و اگر از افزونه فاکتور و چاپ آدرس برای محصولات پستی استفاده می کنید، می توانید این فیلد را هم به برچسب آدرس پستی اضافه کنید تا در قسمت گیرنده چاپ شود.

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

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

همینطور پوسته وب سایت خود را زیپ و دانلود کنید تا در صورتی که مشکلی پیش آمد بتوانید به مرحله قبل برگردید.

چنانچه تمایل داشته باشید می تونیم این ویرایش و تغییرات رو با  هزینه 450 هزار براتون انجام دهیم و این فیلد رو به فروشگاه شما اضافه کنیم.

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

 

 

(8) دیدگاه برای این پست ثبت شده
دیدگاه خود را بفرستید
  1. #1 | یکشنبه 1402/11/15 [11:45 ق.ظ]

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

    • دوشنبه 1402/11/16 [07:41 ق.ظ] | #2

      ممنونم جناب احمدیان عزیز،
      باعث افتخار بنده هست در خدمت شما هستم ،اگر مورد و مشکلی در این مورد وجود داشت در تلگرام پیام بدید تا براتون بررسی و رفع بشه

  2. sepehr
    #3 | سه شنبه 1402/09/07 [02:18 ق.ظ]

    خب این کد رو کجا باید بزاریم؟
    توی function.php?

    • دوشنبه 1402/11/16 [07:43 ق.ظ] | #4

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

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

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

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

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

  4. رها
    #7 | چهارشنبه 1402/03/24 [11:01 ق.ظ]

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

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

    • پنجشنبه 1402/03/25 [12:01 ب.ظ] | #8

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

اعتبارسنجی شماره تلفن همراه در صفحه تسویه حساب ووکامرس »