ممنونم، امیدوارم شما هم خوب باشید.
ببینید توابع $_POST اگه به درستی استفاده نشه ممکنه باگ های بزرگی بوجود بیاره که نقطه نفوذ سایت هستن یا باید با کم کردن تاثیر این تابع یه مقدار به افزایش امنیتش کمک کرد.. همین کد نیاز به چندین کدنویسی جداگانه داره که مکمل هم باشن. برای این مورد پیشنهاد نمی کنم از کد استفاده کنید. ولی اگه کد میخواهید استفاده کنید، کد اصلاح شده زیر رو امتحان کنید:
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'] ) );
}
}
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>';}
ولی همچنان پیشنهاد می کنم افزونه استفاده کنید:
https://www.20script.ir/woocommerce-easy-checkout-field-editor/
https://www.20script.ir/woocommerce-checkout-field-modifier/