با آموزش نحوه افزودن فیلد سفارشی به EDD یک آموزش وردپرس ناب در خدمتتون هستیم شاید شما نیاز داشته باشید در سایت فروشگاه فایل دانلودی خود به فیلد های افزونه Easy Digital Downloads چند فیلد سفارشی اضافه کنید مثل فیلد شماره تلفن , فیلد آدرس , فیلد کد پستی و هر اطلاعات خاصی که مد نظر دارید. با ما همراه باشید تا در این آموزش وردپرس نحوه اضافه کردن فیلد ها رو به شما توضیح بدیم.
به صورت پیش فرض فیلد هایی که در صفحه یا فرم ثبت نام Edd وجود داره ( نام , نام خانوادگی و آدرس ایمیل ) می باشد . حال قصد داریم یک یا چند فیلد دلخواه رو به این فرم اضافه کنیم. برای این کار باید بریم سراغ فایل فانکشن قالب وردپرس که روی وردپرس نصب کردیم. در این آموزش ما فیلم شماره تماس رو می خوایم اضافه کنیم.
عملیاتی که انجام خواهد شد
- اضافه کردن فیلد سفارشی شماره تماس به فرم ثبت نام در صفحه پرداخت
- نحوه required یا الزامی کردم فیلم افزوده شده
- قرار دادن یک پیغام خطا جهت نمایش به کاربر زمانی که اطلاعات لازم را پر نکرد
- ذخیره فیلد سفارشی ما همون فیلد شماره تماس در متای پرداخت
- نمایش شماره تلفن در بخش جزئیات حساب کاربری یا جزئیات پرداخت مشتری
- قابلیت ویرایش شماره تماس کاربر توسط مدیر در بخش جزئیات خرید یا جزئیات حساب کاربری
- اضافه شدن شماره موبایل یا تماس سفارشی در بخش جزییات سفارش امکان تغییر و بروز رسانی توسط مدیر
- اضافه کردن تگ {phone} یا به اصطلاح متغیر phone به لیست متغییر های پیش فرض جهت ارسال این متغییر در ایمیل
- قابلیت کنترل بخش شماره تلفن توسط مشتری ( جهت ویرایش و … )
شروع مراحل اضافه کردن فیلد
ابتدا پوشه قالب وردپرس خود را باز کنید داخل پوشه قالب یه فایل هست به نام Functions.php این فایل رو در یک ویرایشگر متنی مثل notepad باز کنید , لازمه کدهای مربوط به اضافه کردن فیلد دلخواه رو به این فایل اضافه کنیم. ( قبل از هر گونه ویرایش از این فایل بک آپ تهیه کنید )
به احتمال زیاد داخل این فایل قالب شما از قبل یک سری کدها وجود داشته باشه , کدی که معرفی شده رو باید در جایگاه مناسب قرار بدید تا اولا باعث از کار افتادن سایر کدها نشه و همچنین کد خودش درست عمل کنه. ابتدای مدهای داخل این فایل با
<?php
شروع میشه پیشنهاد می کنیم بعد از همین <?php کد ها رو قرار بدید. یا در انتهای کد های همین فایل آخرین خط باید ?> باشه که می تونید کد ها رو قبل از این بخش قرار بدید.
کد مورد نظر جهت اضافه کردن به فایل functions.php
/**
* نمایش فیلد شماره تماس در EDD
* با تغییر لغت ها می توانید هر فیلد دیگری نیز اضافه کنید
*/
function bigtheme_edd_display_checkout_fields() {
// شماره تلفن کاربر درصورتی که اولین بار هست که وارد میشه
if ( is_user_logged_in() ) {
$user_id = get_current_user_id();
$phone = get_the_author_meta( '_edd_user_phone', $user_id );
}
$phone = isset( $phone ) ? esc_attr( $phone ) : '';
?>
<label class="edd-label" for="edd-phone"><?php echo 'شماره تلفن'; ?></label>
<span class="edd-description"><?php echo 'برای اینکه با شما در تماس باشیم شماره تلفن خود را وارد کنید.'; ?></span>
<input class="edd-input" id="edd-phone" name="edd_phone" placeholder="<?php echo 'شماره مشتری'; ?>" type="text" value="<?php echo $phone; ?>" />
<?php } add_action( 'edd_purchase_form_user_info', 'bigtheme_edd_display_checkout_fields' ); /** * الزامی کردن فیلد شماره تماس * فیلد دیگری را اگر میخواهید اینجا وارد نمایید. */ function bigtheme_edd_required_checkout_fields( $required_fields ) { $required_fields = array( 'edd_phone' => array(
'error_id' => 'invalid_phone',
'error_message' => 'یک شماره تلفن معتبر وارد کنید.'
),
);
return $required_fields;
}
add_filter( 'edd_purchase_form_required_fields', 'bigtheme_edd_required_checkout_fields' );
/**
* نمایش دادن پیغام خطا وقتی که کاربر فیلد شماره تلفن را خالی بگذارد.
* میتونید خطا های بیشتر یا پیغان های اضافی اینجا وارد کنید.اگر نیاز دارید.
*/
function bigtheme_edd_validate_checkout_fields( $valid_data, $data ) {
if ( empty( $data['edd_phone'] ) ) {
edd_set_error( 'invalid_phone', 'شماره تلفن خود را وارد کنید.' );
}
}
add_action( 'edd_checkout_error_checks', 'bigtheme_edd_validate_checkout_fields', 10, 2 );
/**
* ذخیره و افزودن فیلد سفارشی شماره تلفن به متا پرداخت EDD
*/
function bigtheme_edd_store_custom_fields( $payment_meta ) {
$payment_meta['phone'] = isset( $_POST['edd_phone'] ) ? sanitize_text_field( $_POST['edd_phone'] ) : '';
return $payment_meta;
}
add_filter( 'edd_payment_meta', 'bigtheme_edd_store_custom_fields');
/**
* افزودن شماره تلفن به صفحه "مشاهده جزییات خرید"
*/
function bigtheme_edd_view_order_details( $payment_meta, $user_info ) {
$phone = isset( $payment_meta['phone'] ) ? $payment_meta['phone'] : 'none';
?>
<div class="column-container">
<div class="column">
<strong><?php echo 'تلفن: '; ?></strong>
<input class="medium-text" name="edd_phone" type="text" value="<?php esc_attr_e( $phone ); ?>" />
<?php _e( 'شماره تلفن مشتری', 'edd' ); ?>
</div>
</div>
<?php
}
add_action( 'edd_payment_personal_details_list', 'bigtheme_edd_view_order_details', 10, 2 );
/**
* ذخیره شماره تلفن وقتی که توسط مشاهده جزییات خرید تغییر داده شده است.
*/
function bigtheme_edd_updated_edited_purchase( $payment_id ) {
// رفتن به متا خرید
$payment_meta = edd_get_payment_meta( $payment_id );
// به روز رسانی شماره تلفن
$payment_meta['phone'] = isset( $_POST['edd_phone'] ) ? $_POST['edd_phone'] : false;
// بروز رسانی متای خرید توسط آرایه جدید
update_post_meta( $payment_id, '_edd_payment_meta', $payment_meta );
}
add_action( 'edd_updated_edited_purchase', 'bigtheme_edd_updated_edited_purchase' );
/**
* افزودن تگ{phone} به صفحه ارسال ایمیل افزونه edd
*/
if ( function_exists( 'edd_add_email_tag' ) ) {
edd_add_email_tag( 'phone', 'شماره تلفن مشتری', 'bigtheme_edd_email_tag_phone' );
}
/**
*تگ {phone ایمیل}
*/
function bigtheme_edd_email_tag_phone( $payment_id ) {
$payment_data = edd_get_payment_meta( $payment_id );
return $payment_data['phone'];
}
/**
* به روزرسانی شماره تلفن در جدول wp_usermeta
* اینجا پروفایل کاربر هست که توسط ادمین تغییر و ویرایش داده میشه.
*/
function bigtheme_edd_store_usermeta( $payment_id ) {
// بازگشت،وقتی که کاربر وارد شد
if ( ! is_user_logged_in() )
return;
//آیدی کاربر
$user_id = get_current_user_id();
// به روزرسانی تلفن
update_user_meta( $user_id, '_edd_user_phone', $_POST['edd_phone'] );
}
add_action( 'edd_complete_purchase', 'bigtheme_edd_store_usermeta' );
/**
* ذخیره تلفن وقتی که value توسط کاربر ویرایش شد.
*/
function bigtheme_edd_save_extra_profile_fields( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) )
return false;
update_user_meta( $user_id, '_edd_user_phone', $_POST['phone'] );
}
add_action( 'personal_options_update', 'bigtheme_edd_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'bigtheme_edd_save_extra_profile_fields' );
/**
* ذخیره فیلد و قتی که کاربر اون رو توی پروفایل کاربری خودش در EDD تغیر داد
*/
function bigtheme_edd_pre_update_user_profile( $user_id, $userdata ) {
$phone = isset( $_POST['edd_phone'] ) ? $_POST['edd_phone'] : '';
// اطمینان از وارد کردن شماره توسط کاربر
if ( ! $phone ) {
edd_set_error( 'phone_required', __( 'شماره تلفن خودتان رو وارد کنید', 'edd' ) );
}
// به روزرسانی شماره تلفن
update_user_meta( $user_id, '_edd_user_phone', $phone );
}
add_action( 'edd_pre_update_user_profile', 'bigtheme_edd_pre_update_user_profile', 10, 2 );
/**
* افزودن شماره تلفن به "جزییات کاربر" در بخش پروفایل کاربری
*/
function bigtheme_user_contactmethods( $methods, $user ) {
$methods['_edd_user_phone'] = 'Phone';
return $methods;
}
add_filter( 'user_contactmethods', 'bigtheme_user_contactmethods', 10, 2 );
خب تقریبا بیشتر کارها انجام شده. فقه یه بخش دیگه لازم داریم برای قابلیت اینکه مشتری بتونه شماره تلفن وارد شده رو ویرایش کنه. این بخش لازمه داخل فایل های افزونه Edd اعمال بشه..
برای این کار ابدا برید داخل پوشه افزونه که داخلش یه پوشه هست به نام templates مسیرش به این صورت میشه wp-content/plugins/easy-digital-downloads/templates حال داخل این پوشه دنبال فایل shortcode-profile-editor.php بگردید , سپس این فایل رو در ویرایشگر خود باز کنید notepad / داخل این فایل که باز کردید یک سری کدهای php وحود داره شما دنبال این قطعه کد بگردید
<?php do_action( 'edd_profile_editor_after' ); ?>
یک خط بالاتر از این کد باید کد زیر رو قرار بدید
<?php $phone = get_user_meta( $user_id, '_edd_user_phone', true ); ?>
<label for="edd_phone"><?php _e( 'شماره تلفن', 'edd' ); ?></label>
<input class="text edd-input required" id="edd_phone" name="edd_phone" type="text" value="<?php echo $phone; ?>" />
خوب دستان عزیز کار ما به پایان رسید و عملیانی که انجام دادیم یک فیلد سفارشی به اسم شماره تلفن با قابلیت هایی که براش تعریف کردیم به فیلد های صفحه عضویت و پرداخت افزونه EDD افزوده شد.