نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس - 1

نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس

با سلام امروز می خواهم نحوه اضافه کردن شماره موبایل ( شماره تلفن همراه ) به هسته وردپرس ( WordPress ) و همچنین به وکامرس ( Woocommerce ) و قالب های آنها را برای شما به طور کامل توضیح دهم.هدف از دریافت شماره تلفن همراه در هر سیستمی می تواند در نوع ذخیره سازی اطلاعات و فیلد های مربوط به آن تاثیر گذار باشد ، اما خوشبختانه وردپرس به حدی عالی و جامع طراحی شده که پیاده سازی این کار هم نه خیلی آسون اما راحتر تر از روش های معمول خواهد بود. ورد پرس در حالت پیش فرض دارای امکاناتی برای دریافت شماره موبایل در هنگام ثبت نام و همچنین در قسمت مدیریت ندارد اما ما با نوشتن یک افزونه و براحتی فعال کردن آن قادر خواهیم بود آن را در سیستم وردپرس و وکامرس خود اضافه کنید.

در انتها به این می پردازیم که آن را چگونه با افزونه های ارسال پیامک هماهنگ کنید و در نهایت فایل این افزونه را در اختیار شما قرار می دهیم تا آن را به دلخواه ویرایش و برای استفاده خود بهینه سازی کنید.در طی مقاله هم کد قسمت های مخلف این افزونه را برای شما توضیح خواهم داد.

ساخت یک فایل افزونه خام

مثل روال ساخت هر افزونه ای ابتدا یک فولدر به نام “mobile-num-registration-fields” در مسیر “\wp-content\plugins\” ساخته و بعد یک فایل با نام mobile-num-registration-fields.php در داخل آن می سازیم.مرحله بعد ، در ابتدای فایل تولید شده باید شناسنامه افزونه قرار داده شود که در آینده توسط هسته وردپرس خوانده خواهد شد ، که می توانید از کد زیر استفاده کنید :

<?php
/*
Plugin Name: Add mobile number field
Plugin URI: http://www.servit.ir/
Description: Sample plugin for adding a Mobile Number profile field to WordPress and Woocommerce on the registration page
Author: Shahin Ataeikhah
Version: 0.2
Author URI: http://www.servit.ir/
*/

از ایجا به بعد یعنی دقیقا بعد از کدهای بالا ، کد های افزونه شما نوشته خواهد شد.

کد اضافه کردن فیلد شماره موبایل به فرم ثبت نام

حال نوبت به ساخت تابعی است که یک تکست باکس به فرم ثبت نام وکامرس شما اضافه کند.این کد تقریبا کد استاندارد است اما شما می توانید کد html آن را دستکاری کنید و با قالب خود هماهنگ سازید و یا کلاس های شخصی خود را به آن اضافه کنید :

/*
* Add new register fields for WooCommerce registration.
* @return string Register fields HTML.
*/
function wooc_mobnum_register_fields() { ?>


		<input type="text" class="form-control" name="mpmobile" id="reg_billing_mob_num" value="<?php if ( ! empty( $_POST['mpmobile'] ) ) esc_attr_e( $_POST['mpmobile'] ); ?>" placeholder="<?php _e( 'شماره تلفن همراه', 'woocommerce' ); ?>" />


<div class="servit-tip ac"><span>به عنوان مثال : ۰۹۳۷۷۶۳۳۴۳۵</span></div>




	<?php 
}

سپس بعد از تعریف تابع باید آن را در هنگام بارگذاری صفحه ثبت نام در وکامرس فرا خوانی کنید پس در ادامه کد خود خط زیر را اضافه کنید که تابع شما را فراخوانی می کند :

add_action( 'woocommerce_register_form_start', 'wooc_mobnum_register_fields' );

دقت کنید در توابع قبلی و بعدی ما فیلد شماره تلفن همراه را با نام “mpmobile” چه در فرم ها و چه در دیتابیس خواهیم شناخت که این نام را بنده به این دلیل انتخاب کرده ام که با افزونه وردپرس ملی پیامک هماهنگ شود زیرا در این افزونه شماره موبایل مشتریان را با این نام در دیتا بیس شناسایی می کند که شما می توانید نام آن را با نامی که سرویس دهنده پیامک شما در افزونه پیامک خود استفاده کرده هماهنگ کنید و در همه کد هر جا با کلمه “mpmobile” مواجه شدید آن را با نام مورد نظر خود تغییر دهید و البته اگر از افزونه های پیامک استفاده نمی کنید نیازی نیست نام آن را تغییر دهید میتواند آن را به همین شکل باقی بگذارید.

اعتبار سنجی فیلد شماره موبایل یا Validation

حالا فرصت آن فرا رسیده که تابعی بنویسید تا به وردپرس بگویید شماره تلفن همراه دریافت شده را پس از دریافت اعتبار سنجی کند و در صورت هماهنگ نبودن با سیاست های شما آن را نپذیرد  و پیام دلخواهی را برای اصلاح به کاربر اعلام کند ، به طور مثال در هنگامی که فیلد خالی رها شده و یا هنگامی قالب شماره تلفن به صورت صحیح وارد نشده و …  پیامی را به کاربر نمایش دهد و از او بخواهد فرم ثبت نام دا دقت بیشتری وارد کند :

/*
* Validate the mobile number register fields.
* @param string $username         Current username.
* @param string $email             Current email.
* @param object $validation_errorsWP_Error object.
* @return void
*/
function wooc_validate_mobnum_register_fields( $username, $email, $validation_errors ) {
	if ( isset( $_POST['mpmobile'] ) && empty( $_POST['mpmobile'] ) ) {
		$validation_errors->add( 'mpmobile_error', __( 'شماره تلفن همراه خود را وارد کنید.', 'woocommerce' ) );
	}
	elseif (isset( $_POST['mpmobile'] ) &&  !preg_match("/^09-?[0-9]{2}-?[0-9]{3}-?[0-9]{4}$/",  $_POST['mpmobile'] )) {
		$validation_errors->add( 'mpmobile_error', __( 'شماره تلفن همراه خود را در قالب درست وارد کنید.', 'woocommerce' ) );
	}
	else {
		$yoursearchquery =  $_POST['mpmobile'] ;
		$args = array( 'meta_key' => 'mpmobile', 'meta_value' => $yoursearchquery, 'number' => 1 ) ;

		$user_query = new WP_User_Query( $args );
		// User Loop
		if ( ! empty( $user_query->results ) ) {
			$validation_errors->add( 'mpmobile_error', __( 'این شماره تلفن همراه موجود می باشد ، لطفا وارد شوید.', 'woocommerce' ) );
		} 
	}
}

در کد بالا بنده سه شرط را برای این تابع مشخص کرده ام که ابتدا اگر فیلد خالی بود اروری را مشخص و چاپ کند( if ) و بعد چک کند که شماره موبایل اگر در قالب درست وارد نشده پیام تصحیح را چاپ کند ( else if ) و در انتها اگر شماره دریافت شده از مشتری از قبل ثبت شده بود به مشتری اطلاع دهد که این شماره تکراری است و مشتری نمی توند با این شماره ثبت نام کند ( else) .

تنها نکته ای که باقی می ماند تشخیص صحیح بودن قالب شماره تلفن همراه است که این کا را با یک regex یا ( regular expression ) یا عبارات با قاعده انجام داده ایم که “/^۰۹-?[۰-۹]{۲}-?[۰-۹]{۳}-?[۰-۹]{۴}$/” می باشد که نمایان گر این است که مشتری باید شماره موبایل خود را به طوری وارد کند که با ۰۹ شروع شود و به طول ۱۱ کاراکتر باشد و هر کاراکتر می تواند شامل اعداد ۰-۹ باشد به طور مثال “۰۹۳۷۷۶۳۳۴۳۵” .بدیهی است که ای نوع دریافت شماره فقط مختص به کشور ایران می باشد شما اگر فعالیت بین المللی دارید می توانید با تغییر regex شماره را به فرم های دیگر مثل “۰۰۹۸۹۳۷۷۶۳۳۴۳۵” و … دریافت کنید و به کاربر اجازه ثبت نام به فرم های دیگر را ندهید.این نوع ریجکس ها را می توانید با یک جست و جو ساده در اینترنت متناسب با کسب و کار خود دریافت کنید.در ضمن هرکدام از این شرط ها هم می توانید با توجه به نیازتان و همینطور سیاست های کاری خودتان حذف یا جابه جا کنید ، به طور مثال برای برخی نیازی نیست به صورت اجباری از کاربر شماره تلفن دریافت کنند ، آنها باید شرط if را حذف کنند و بعد آن را با شرط elseif جایگزین کنند.پیام ها ی خطای سیستم را همینطور میتوانید به دلخواه خود تنظیم کنید.

بعد از همه ی این مطالب این تابع را همانند تابع قبلی باید در جای مناسب خود فراخوانی کنید که کد زیر این کار را برای شما انجام می دهد :

add_action( 'woocommerce_register_post', 'wooc_validate_mobnum_register_fields', 10, 3 );

ذخیره سازی و بروز رسانی شماره موبایل در پایگاه داده ( Database )

در این بخش شما می بایست شماره تلفن همراه دریافت شده را در پایگاه داده خود اضافه یا بروز رسانی کنید که همانطور که گفتم بنده آن را با نام “mpmobile” دخیره میکنم ، این فیلد در داخل جدول “user_metadata” در دیتا بیس وردپرس شما دخیره می شود که با آیدی یوزر ثبت نام کننده به یوزر متصل می شود.مقدار شماره تلفن دریافت شده به علاوه نام فیلد که در اینجا “mpmobile” است  به همراه آیدی یوزر و یک آیدی از نوع Auto Number به صورت یک رکورد به این جدول پس از اعتبار سنجی اضافه خواهد شد.کد این بخش به شرح زیر می باشد :

/*
* Save the mobile number register fields.
* @paramint $customer_id Current customer ID.
* @return void
*/

function wooc_save_mobnum_register_fields( $customer_id ) {
	// WordPress user mobile number field.
	if ( isset( $_POST['mpmobile'] ) ) {
		update_user_meta( $customer_id, 'mpmobile', sanitize_text_field( $_POST['mpmobile'] ) );
	}
}

سپس این تابع را هم نیز همانند دیگر تابع ها در جای مناسب خود فراخوانی کنید :

add_action( 'woocommerce_created_customer', 'wooc_save_mobnum_register_fields' );

اضافه کردن فیلد شماره تلفن همراه به قسمت مدیریت

نیاز است که پس از فعال سازی این افزونه فیلد شماره تلفن همراه برای ویرایش و اضافه کردن شماره موبایل کاربران به بخش مدیریت در قسمت ویرایش کاربران قابل رویت و دسترسی باشد.برای این منظور باید از تابع زیر استفاده کنید :

/**
 * Add mobile number field to admin panel
 */
function my_show_mobnum_profile_fields ( $user )
{
	?>


<h3>شماره تلفن همراه مشتری</h3>




<table class="form-table">


<tr>


<th><label for="mpmobile">شماره تلفن همراه</label></th>




<td>
				<input type="text" name="mpmobile" id="mpmobile" value="<?php echo esc_attr( get_the_author_meta( 'mpmobile', $user->ID ) ); ?>" class="regular-text" />
				<span class="description">لطفا شماره تلفن همراه را وارد کنید ، به طور مثال : ۰۹۳۷۷۶۳۳۴۳۵</span>
			</td>


		</tr>


	</table>


	<?php
}

این تابع کد HTML مربوط به فیلد شماره تلفن همراه را تولید می کند که استاندارد می باشد و با قالب اصلی مدیریت وردپرس کاملا هماهنگ می باشد در صورتی که شما قالب دیگری استفاده می کنید و یا مشکلی دارید می توانید آن را به دلخواه خود تغییر دهید.

سپس مثل موارد بالا باید این تابع را در موقیت مناسب فرا خوانی کنید.این بار باید در دو هنگام این تابع را فراخوانی کنید یکی برای نمایش پروفایل و دیگری برای ویرایش پروفایل می باشد که به شرح زیر است :

add_action ( 'show_user_profile', 'my_show_mobnum_profile_fields' );
add_action ( 'edit_user_profile', 'my_show_mobnum_profile_fields' );

ذخیره سازی تغیرات شماره موبایل در بخش مدیریت

همانطور که در صفحه ثبت نام شماره موبایل کاربر را دریافت و پس از اعتبار سنجی آن را در دیتا بیس ذخیره میکنید نیاز است که اگر شما در قسمت مدیریت نیز تغییر کرد آن را به روز رسانی کنید و در داخل پایگاه داده خود تغییر دهید که با کد زیر امکان پذیر است :

/*
* Save the mobile number register fields on admin panel
*/
function my_save_mobnum_profile_fields( $user_id )
{
	if ( !current_user_can( 'edit_user', $user_id ) )
		return false;
	update_usermeta( $user_id, 'mpmobile', $_POST['mpmobile'] );
}

خوب کار دیگر در اینجا به اتمام رسید و می توانید از افزونه خود را نصب و فعال و ازاستفاده کنید.فراموش نکنید همانطور که گفتم شما اگر از شامانه پیامکی خاصی در وردپرس استفاده می کنید می توانید نام فیلد “mpmobile” را با نام مورد استفاده آن پلاگین عوض کنید و هر جا که mpmobile دیدید این نام را قرار دهید.
پس از آن نیاز است دوباره برای دو قسمت متفاوت این تابع را فراخوانی کنید که شامل کد زیر می باشد :

add_action ( 'personal_options_update', 'my_save_mobnum_profile_fields' );
add_action ( 'edit_user_profile_update', 'my_save_mobnum_profile_fields' );
?>

پس از اضافه کردن کد بالا به افزونه خود شما قادر خواهید بود در قسمت مدیریت در بخش ویرایش کاربران فیلد شماره تلفن همراه را مانند شکل زیر مشاهده کنید:

نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس - 2
نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس – ۲

نحوه به کار گیری این افزونه همراه با افزونه ملی پیامک

فقط کافی است این افزونه و افزونه ملی پیامک را فعال کنید و در بخش تنظیمات عمومی ملی پیامک تیک مربوط به “اضافه کردن فیلد شماره موبایل هنگام ثبت نام کاربران” را بردارید زیرا این فیلد به وسیله این افزونه که نوشته ایم اضافه خواهد شد.

نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس - 3
نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس – ۳

در نهایت همه کد فایل افزونه شما یعنی mobile-phone-registration-fields.php به شرح زیر است :

<?php /* Plugin Name: Add mobile number field Plugin URI: http://www.servit.ir/ Description: Sample plugin for adding a Mobile Number profile field to WordPress and Woocommerce on the registration page Author: Shahin Ataeikhah Version: 0.2 Author URI: http://www.servit.ir/ */ /* * Add new register fields for WooCommerce registration. * @return string Register fields HTML. */ function wooc_mobnum_register_fields() { ?>


		<input type="text" class="form-control" name="mpmobile" id="reg_billing_mob_num" value="<?php if ( ! empty( $_POST['mpmobile'] ) ) esc_attr_e( $_POST['mpmobile'] ); ?>" placeholder="<?php _e( 'شماره تلفن همراه', 'woocommerce' ); ?>" />


<div class="servit-tip ac"><span>به عنوان مثال : ۰۹۳۷۷۶۳۳۴۳۵</span></div>




	<?php } add_action( 'woocommerce_register_form_start', 'wooc_mobnum_register_fields' ); /* * Validate the mobile number register fields. * @param string $username Current username. * @param string $email Current email. * @param object $validation_errorsWP_Error object. * @return void */ function wooc_validate_mobnum_register_fields( $username, $email, $validation_errors ) { if ( isset( $_POST['mpmobile'] ) && empty( $_POST['mpmobile'] ) ) { $validation_errors->add( 'mpmobile_error', __( 'شماره تلفن همراه خود را وارد کنید.', 'woocommerce' ) );
	}
	elseif (isset( $_POST['mpmobile'] ) &&  !preg_match("/^09-?[0-9]{2}-?[0-9]{3}-?[0-9]{4}$/",  $_POST['mpmobile'] )) {
		$validation_errors->add( 'mpmobile_error', __( 'شماره تلفن همراه خود را در قالب درست وارد کنید.', 'woocommerce' ) );
	}
	else {
		$yoursearchquery =  $_POST['mpmobile'] ;
		$args = array( 'meta_key' => 'mpmobile', 'meta_value' => $yoursearchquery, 'number' => 1 ) ;

		$user_query = new WP_User_Query( $args );
		// User Loop
		if ( ! empty( $user_query->results ) ) {
			$validation_errors->add( 'mpmobile_error', __( 'این شماره تلفن همراه موجود می باشد ، لطفا وارد شوید.', 'woocommerce' ) );
		} 
	}
}
add_action( 'woocommerce_register_post', 'wooc_validate_mobnum_register_fields', 10, 3 );



/*
* Save an update the mobile number register fields.
* @paramint $customer_id Current customer ID.
* @return void
*/
function wooc_save_mobnum_register_fields( $customer_id ) {
	// WordPress user mobile number field.
	if ( isset( $_POST['mpmobile'] ) ) {
		update_user_meta( $customer_id, 'mpmobile', sanitize_text_field( $_POST['mpmobile'] ) );
	}
}
add_action( 'woocommerce_created_customer', 'wooc_save_mobnum_register_fields' );



/**
 * Add mobile number field to admin panel
 */
function my_show_mobnum_profile_fields ( $user )
{
	?>


<h3>شماره تلفن همراه مشتری</h3>




<table class="form-table">


<tr>


<th><label for="mpmobile">شماره تلفن همراه</label></th>




<td>
				<input type="text" name="mpmobile" id="mpmobile" value="<?php echo esc_attr( get_the_author_meta( 'mpmobile', $user->ID ) ); ?>" class="regular-text" />
				<span class="description">لطفا شماره تلفن همراه را وارد کنید ، به طور مثال : ۰۹۳۷۷۶۳۳۴۳۵</span>
			</td>


		</tr>


	</table>


	<?php } add_action ( 'show_user_profile', 'my_show_mobnum_profile_fields' ); add_action ( 'edit_user_profile', 'my_show_mobnum_profile_fields' ); /* * Save the mobile number register fields on admin panel */ function my_save_mobnum_profile_fields( $user_id ) { if ( !current_user_can( 'edit_user', $user_id ) ) return false; update_usermeta( $user_id, 'mpmobile', $_POST['mpmobile'] ); } add_action ( 'personal_options_update', 'my_save_mobnum_profile_fields' ); add_action ( 'edit_user_profile_update', 'my_save_mobnum_profile_fields' ); ?>

شما میتوانید این افزونه را از لینک زیر دانلود کنید :

دانلود افزونه

کلام آخر

سرویت و نویسنده این مطلب هیچ گونه مسئولیتی در استفاده نادرست و مشکلات احتمالی که ممکن است بوجود بیاید نخواهد داشت. سرویس دهنده گان پیامک می توانند این افزونه را دریافت و با افزونه وردپرسی خود ترکیب کنند تا خدمات بهتری را برای هموطنان خود ارائه داده باشند.

به اشتراک بگذارید:
کلوبفیس نماافسران

4 thoughts on “نحوه اضافه کردن شماره موبایل به وردپرس و وکامرس

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *