همانطور که میدانید فرم موجود در برگه پرداخت در ووکامرس، فیلدهایی نظیر billing_phone ، shipping_address_1 و… دارد. برخی از این فیلدها در سفارش و برخی دیگر در شناسنامه (پروفایل) کاربر ذخیره میشوند. ممکن است شما بخواهید یک یا چند فیلد جدید به این بخش اضافه نمایید. در این نوشته شما را با نحوه ایجاد و ذخیرهسازی فیلدهای سفارشی در برگه پرداخت ووکامرس آشنا خواهیم کرد.
شما میتوانید هم فیلدی قرار دهید که در شناسنامه کاربر ذخیره شود و هم فیلدی که در سفارش ذخیره شده و در جزئیات سفارش قابل نمایش باشد.
نکته: شما به منظور استفاده از کدهای هر بخش باید آن را در فایل functions.php پوسته فرزند قرار دهید یا از افزونه Snippets استفاده نمایید. به خاطر داشته باشید کدها را در functions.php پوسته والد قرار ندهید، چون با بهروزرسانی پوسته این کدها از بین خواهند رفت.
آنچه در این مقاله میخوانید
افزودن فیلد سفارشی و ذخیره آن در پروفایل کاربر
قطعه کد زیر به شما کمک میکند تا یک فیلد سفارشی و دلخواه به برگه پرداخت اضافه نمایید. ما در اینجا میخواهیم آدرس سایت را به برگه پرداخت اضافه نماییم.
// Display field @ Checkout
add_action( 'woocommerce_after_checkout_billing_form', 'tidaweb_add_user_field_to_checkout' );
function tidaweb_add_user_field_to_checkout( $checkout )
{
$current_user = wp_get_current_user();
$saved_url = $current_user->user_url;
woocommerce_form_field( 'user_url', array(
'type' => 'text',
'class' => array('user_url form-row-wide'),
'label' => __('Website URL'),
'placeholder' => __('http://yoursite.com'),
'required' => false
), $saved_url );
}
تابع woocommerce_form_field یکی از توابع موجود در ووکامرس است که برای ایجاد انواع فیلد در فرمهای مختلف استفاده میشود.
برای ذخیرهسازی فیلد کافی است از قطعه کد زیر استفاده کنید. کاربر پس از آن که بر روی دکمه ثبت سفارش کلیک کند، اطلاعات این فیلد در پروفایلش به صورت خودکار ذخیره خواهد شد.
// Save Field Into User Meta
add_action( 'woocommerce_checkout_update_user_meta', 'tidaweb_checkout_field_update_user_meta' );
function tidaweb_checkout_field_update_user_meta( $user_id )
{
if ( $user_id && $_POST['user_url'] ) {
// once again, use "user_url"
$args = array(
'ID' => $user_id,
'user_url' => esc_attr( $_POST['user_url'] )
);
wp_update_user( $args );
}
}
افزودن فیلد سفارشی و ذخیره آن در سفارش
قطعه کد زیر به شما کمک میکند تا یک فیلد سفارشی و دلخواه به برگه پرداخت اضافه نمایید. به عنوان مثال فرض کنید میخواهیم فیلدهایی با نام دریافتکننده هدیه و پیام هدیه را به برگه پرداخت اضافه کنیم. کد زیر این فیلدها را به این برگه اضافه خواهد کرد.
// Display field @ Checkout
add_action( 'woocommerce_after_checkout_billing_form', 'tidaweb_add_order_field_to_checkout' );
function tidaweb_add_order_field_to_checkout( $checkout )
{
woocommerce_form_field( 'gift_owner_name', array(
'type' => 'text',
'class' => array('gift_owner_name form-row-wide'),
'label' => __('Gift Owner Name'),
'required' => false
), $checkout->get_value( '_gift_owner_name' ) );
woocommerce_form_field( 'gift_message', array(
'type' => 'textarea',
'class' => array('gift_message form-row-wide'),
'label' => __('Gift Message'),
'required' => false
), $checkout->get_value( '_gift_message' ) );
}
این بخش همانند بخش قبلی بوده و برای ذخیرهسازی کافی است از قطعه کد زیر استفاده کنید تا دادهها به عنوان اطلاعات سفارش ذخیره شوند.
// Save Field Into Order Meta
add_action( 'woocommerce_checkout_update_order_meta', 'tidaweb_checkout_field_update_order_meta' );
function tidaweb_checkout_field_update_order_meta( $order_id )
{
if ( ! empty( $_POST['gift_owner_name'] ) && ! empty( $_POST['gift_message'] )) {
$gift_owner_name = wc_clean( $_POST['gift_owner_name'] );
$gift_message = wc_clean( $_POST['gift_message'] );
update_post_meta( $order_id, '_gift_owner_name', $gift_owner_name );
update_post_meta( $order_id, '_gift_message', $gift_message );
}
}
کد زیر برای نمایش اطلاعات در جزئیات سفارش استفاده میشود و اطلاعات ذخیره شده در برگه پرداخت را در جزئیات سفارش نمایش خواهد داد.
// Display field in order meta
add_action( 'woocommerce_admin_order_data_after_billing_address', 'tidaweb_display_order_meta' );
function tidaweb_display_order_meta( $order )
{
echo '<p><strong>'.__('Gift Owner Name').':</strong> <br/>' . get_post_meta( $order->get_id(), '_gift_owner_name', true ) . '</p>';
echo '<p><strong>'.__('Gift Message').':</strong> <br/>' . get_post_meta( $order->get_id(), '_gift_message', true ) . '</p>';
}
در این نوشته نحوه ایجاد و ذخیرهسازی فیلد سفارشی در برگه پرداخت را به شما آموزش دادیم. شما با استفاده از آموزش بالا، میتوانید هر نوع فیلد دلخواهی که مورد نظرتان باشد را ایجاد کنید. در صورتی که سؤال یا ابهامی دارید، میتوانید آن را از طریق دیدگاهها با ما در میان بگذارید.
منبع : Business Bloomer