بعد از اینکه کاربر محصولات مورد نیاز خود را به سبد خرید اضافه کرد و خرید کاربر به اتمام رسید، با کلیک بر روی دکمه تسویه حساب، کاربر به صفحه تسویه حساب منتقل میشود.
در این صفحه، اطلاعات ضروری کاربر از جمله نام و نام خانوادگی، آدرس و شماره تماس، همچنین کد پستی جمعآوری میشود و پیش از ارسال کاربر به درگاه بانکی، این اطلاعات در دیتابیس سایت ذخیره میگردد.
یکی از فیلدهایی که در این فرآیند اضافه شده است، فیلد کد ملی است. این اقدام نهتنها به کاربران امکان میدهد با دقت بیشتری اطلاعات خود را ارائه دهند، بلکه امکاناتی همچون جستجوی سریع در اطلاعات خریدها، دریافت گزارشات دقیق تر، ارائه تخفیفات بهتر و دستهبندی موثرتر مشتریان را نیز فراهم میکند.
نحوه افزودن فیلد کد ملی به صفحه تسویه حساب در ووکامرس
پس از انتخاب محصولات مورد نیاز و افزودن آنها به سبد خرید، وقتی کاربر خرید خود را کامل میکند، با فشردن دکمه تسویه حساب، به صفحه تسویه حساب منتقل میشود.
در این صفحه، اطلاعات ضروری کاربر از جمله نام، نام خانوادگی، آدرس، شماره تماس و کد پستی جمعآوری میشود و پیش از هدایت کاربر به درگاه بانکی، این اطلاعات در دیتابیس سایت ثبت میشوند.
یکی از اطلاعات مهمی که میتواند در این فرآیند افزوده شود، فیلد کد ملی است. این فیلد به عنوان یک شناسه یکتا و یونیک برای هر فرد در نظام، مواردی همچون جستجوی سریع در اطلاعات خرید، دریافت گزارشات دقیقتر، ارائه تخفیفات مخصوص و دستهبندی مؤثر مشتریان را فراهم میکند.
اطلاعات کدملی در صفحه تسویه حساب
همانطور که میدانیم، کد ملی به صورت منحصر به فرد از 10 عدد تشکیل شده است و دارای یک الگوریتم خاص است. اگر تعداد کاراکترها محدود نشده باشد، کاربر میتواند هر تعداد کاراکتر دلخواه را وارد کند.
در صورتی که اعتبارسنجی برای این فیلد در نظر گرفته نشده باشد، این امکان برای کاربران فراهم میشود تا کدهای ملی فیک و ساختگی را وارد کنند که میتواند منطق افزودن این فیلد را مورد شکایت قرار دهد.
افزودن فیلد کد ملی به برگه تسویه حساب در ووکامرس
ابتدا با استفاده از تابع woocommerce_form_field یک فیلد جدید در بخش تسویه حساب ووکامرس ایجاد میشود.
در کدهای افزودن فیلد کد ملی، این فیلد به عنوان ضروری تعریف شده است، بهطوریکه کاربر باید حتماً مقدار آن را وارد کند. در صورت خالی گذاشتن، پیامی به کاربر نمایش داده میشود که این فیلد اجباری است.
در این کد، برای فیلد مذکور، یک عنوان و یک نام انتخاب شدهاند. کد ملی وارد شده باید حتماً دارای 10 کاراکتر باشد و با استفاده از تابع check_national_code که از پیش تعریف شده، اعتبارسنجی میشود تا طبق الگوریتم کد ملی، صحیح و معتبر باشد.
در صورتی که تمامی شرایط برقرار بود، پرداخت انجام میشود. در غیر اینصورت، پیام خطا با تابع wc_add_notice نمایش داده میشود.
در نهایت، این کدملی با مقدار national_code به عنوان متادیتای سفارش جاری در جدول post_meta دیتابیس سایت ذخیره میشود و هر زمان که لازم باشد، قابل فراخوانی و نمایش در بخشهای مختلف از جمله فاکتورها میباشد.
فانکشن اعتبارسنجی کدملی در ووکامرس
//The function of checking the accuracy of the national code
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;
return false;
}
// Adding country code field to WooCommerce payment page
function add_custom_national_code_field() {
echo '<div class="form-row form-row-wide woocommerce-additional-fields__field-wrapper">
<label for="billing_national_code">' . __('کد ملی', 'your-theme-domain') . ' <span class="required">*</span></label>
<span class="woocommerce-input-wrapper"><input type="text" class="input-text" name="billing_national_code" id="billing_national_code" value="' . esc_attr(isset($_POST['billing_national_code']) ? $_POST['billing_national_code'] : '') . '" /></span>
</div>';
}
add_action('woocommerce_after_checkout_billing_form', 'add_custom_national_code_field');
function validate_custom_national_code_field() {
$code = isset($_POST['billing_national_code']) ? sanitize_text_field($_POST['billing_national_code']) : '';
if (!empty($code) && ! check_national_code($code)) {
wc_add_notice( __( 'کد ملی وارد شده معتبر نیست.' ), 'error' );
}
}
add_action('woocommerce_checkout_process', 'validate_custom_national_code_field');
// Saved national code in the order
function save_custom_national_code_field($order_id) {
if (!empty($_POST['billing_national_code'])) {
update_post_meta($order_id, 'billing_national_code', sanitize_text_field($_POST['billing_national_code']));
}
}
add_action('woocommerce_checkout_update_order_meta', 'save_custom_national_code_field');
//Display the national code in the orders section of the admin
function checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('کد ملی').':</strong> ' . get_post_meta( $order->id, 'billing_national_code', true ) . '</p>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'checkout_field_display_admin_order_meta', 10, 1 );
با افزودن قطعه کدهای مذکور در فایل functions.php، فیلد کد ملی به فرمهای برگه تسویه حساب اضافه خواهد شد. این فیلد به صورت اجباری تعریف شده است، لذا کاربر ملزم به وارد کردن کدملی میباشد.
با توجه به اعتبارسنجی این فیلد، کاربر مجبور است مقدار صحیحی را در این فیلد وارد کند. در صورت ورود مقدار نادرست، پیامی که به خطا اشاره دارد، به کاربر نمایش داده میشود.
اعتبارسنجی کدملی کاربر در ووکامرس
کد ملی یک ترکیب از 10 عدد است که الگوریتم خاصی را دنبال میکند. به علاوه، کد های بالا دارای اعتبارسنجی است که جلوی وارد کردن کدملی فیک و ساختگی توسط کاربران را میگیرد و امکان ثبت سفارش با کدهای ملی نامعتبر را نمیدهد.
این تدابیر باعث میشود که تمامی سفارشات و خریدهای کاربران همراه با کدهای ملی، در دیتابیس ذخیره شده و در زمان نیاز، اطلاعات خرید مشتری با استفاده از کد ملی، به سایر اطلاعات دسترسی پیدا کند. همچنین، در هنگام چاپ آدرس بسته پستی، از کد ملی نیز بهرهمند شود.
نمایش اطلاعات کدملی در پنل مدیریت وردپرس
فیلد کد ملی در بخش مدیریت وردپرس، در قسمت جزئیات سفارش نمایش داده میشود. اگر از افزونه فاکتور و چاپ آدرس برای محصولات پستی استفاده میکنید، میتوانید این فیلد را به برچسب آدرس پستی اضافه کنید تا در قسمت گیرنده چاپ شود.
پیشنهاد میشود پیش از افزودن کدها و اعمال تغییرات در قالب، یک فولبکآپ کامل از وبسایت خود تهیه نمایید. همچنین، به منظور اطمینان از امنیت، پوسته وبسایت را زیپ کرده و دانلود کنید تا در صورت بروز مشکل، به وضعیت قبلی بازگردانی شود.
سلام و روز خوبی براتون آرزومندم،
ممنون از این راه کاری که ارائه کردین یه سوال داشتم، داخل کد قسمت “your-theme-domain” این رو باید چی وارد کنم؟
میشه با مثال بفرمایید.
خیلی ممنون
با سلام و وقت بخیر ، این کد رو وقتی وارد کنیم بعد کجا نمایش داده میشه؟ یعنی بطور خودکار داخل اطلاعات سفارش ثبت میشه؟چون با افزونه های وردپرس وقتی فیلد کدملی اضافه میکنی بعدا هیچ جا نمایش داده نمیشه
سلام دوست من
ممنونم بابت اینکه وب دنج رو انتخاب کردید.
بعد از استفاده از این کد بصورت خودکار فیلد کد ملی به صفحه تسویه حساب اضافه میشه
با درود
خیلی ممنون از شما
بسیار عالی و کاربردی
آیا امکانش هست این فیلد رو توی حساب کاربری هم اضافه کرد که دیگه نیازی نباشه هنگام تسویه حساب کد ملی وارد کنند؟
یعنی با وارد کردن کد ملی در حساب کاربری از قبل نیاز اجبار به وارد کردن کد ملی رو برطرف کرده باشن
با سپاس
سلام دوست من
با این کد نمیتونید مواردی که فرمودین رو پیاده کنید.
عالی بودددددددددددددددددددددددددد
خیلی به دردم خورد
خوشحالم مورد استفاده شما قرار گرفته دوست من
ممنون از مقاله خوبتون
ممنونم از شما دوست خوبم