راهنمای افزودن فیلد کد ملی به برگه تسویه حساب ووکامرس:
اول از همه با استفاده از تابع 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 && $ret==$parity) || ($ret>=2 && $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 تماس بگیرید تا برای انجام این کار با شما هماهنگی لازم صورت بگیره.