راهنمای افزودن فیلد کد ملی به برگه تسویه حساب ووکامرس:
اول از همه با استفاده از تابع 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 تماس بگیرید تا برای انجام این کار با شما هماهنگی لازم صورت بگیره.