ثبت نام کاربر جدید با متد پیشفرض وردپرس

تاریخ: 06 آذر 1398

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

روند ایجاد یک فرم ثبت نام در وردپرس بسیار ساده می باشد و با اندکی دانش فرانت اند برای طراحی و ولیدیشن فرم و بک اند وردپرس برای ولیدیشن و ذخیره سازی کاربر جدید قابل پیاده سازی است.

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

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

 

اطلاعات اصلی کاربران در دیتابیس پیشفرض وردپرس

برای ثبت نام و در حالت کلی کار با یوزرها در وردپرس، لازم است با ساز و کار دیتابیس در مورد یوزرها آشنا باشیم. در وردپرس به صورت پیشفرض دقیقا مانند کامنت ها، پست ها و ترم ها، یک جدول اصلی با نام wp_users برای ذخیره اطلاعات بیس یک یوزر و همچنین یک جدول متا با نام wp_usermeta برای ذخیره متادیتاهای یوزر وجود دارد. در مورد ساز و کار متادیتا در وردپرس پست های مختلفی ایجاد کرده ایم که می توانید به آنها مراجعه نمایید. این لینک

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

insert-new-user-in-wordpress

در تصویر بالا می توانید جدول wp_users را مشاهده نمایید. (خطهای سیاه درشت برای حفظ امنیت بیشتر کشیده شده اند)

چنانچه می بینید این جدول شامل ده ستون می باشد:

1- ستون ID

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

2- ستون user_login

این ستون نگه دارنده نام کاربری کاربر می باشد. (همان یوزرنیم). در سایت های خارجی کلمه username لیبل دریافت نام کاربری می باشد. در دیتابیس وردپرس این مقدار در ستون user_login ذخیره میشود. این مقدار به صورت پیشفرض امنیتی نبوده و توسط بعضی روش ها توسط کاربر عمومی هم قابل دریافت می باشد. user_login قابل تغییر نمی باشد!

3- ستون user_pass

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

user_pass در وردپرس با فرمت md5 انکود می شود و همانطور که در تصویر فوق هم می بینید، رمز عبورهای کاربران فعلی به صورت ترکیبی از کاراکترها، اعداد و حروف می باشد که ناشی از انکودینگ md5 می باشد. این انکودینگ تقریبا با هیچ روشی قابل دیکد نیست.

4- ستون user_nicename

 

5- ستون user_email

ستون user_email برای ذخیره ایمیل کاربر می باشد. این

6- ستون user_url

این ستون نگه دارنده آدرس سایت کاربر می باشد. گرچه ممکن است لینک یکی از شبکه های اجتماعی کاربر هم توسط او در نظر گرفته شود.

7- ستون user_registered

این ستون حاوی تاریخ ثبت نام کاربر می باشد.

8- ستون user_activation_key

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

9- ستون user_status

این ستون نگه دارنده وضعیت کاربر می باشد.

10- ستون display_name

این ستون نگه دارنده نام نمایشی کاربر می باشد که معمولا در بالای پست ها با عنوان نام نویسنده نشان داده می شود.

 

چنانچه گفتیم اطلاعات اضافی کاربر به عنوان متادیتاها در جدول متادیتای کاربر ذخیره می شود.

اکنون به بحث ایجاد ثبت نام اختصاصی در وردپرس ادامه می دهیم. فرم ثبت نام می تواند مکانیزم های متفاوتی داشته باشد. مثلا می تواند فیلد های مشخصی را داشته باشد. مراحل خاصی را داشته باشد و …

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

با زدن آدرس زیر می توانیم وارد صفحه ثبت نام در وردپرس شویم: (آدرس زیر مربوط به یکی از سایتهای فیک و تمرینی ما می باشد. شما می توانید وارد صفحه ثبت نام وردپرس سایت خودتان شوید)

https://novintech.info/woocommerce/wp-login.php?action=register

insert-new-user-in-wordpress1

نکته مهم این است که امکان ثبت نام کاربران باید فعال باشد. برای بررسی این مسئله می توانید به تنظیمات عمومی وردپرس و فیلد عضویت بروید و چک کنید که امکان ثبت نام موجود باشد.

چنانچه مشاهده می کنید مکانیزم ثبت نام پیشفرض وردپرس بدینصورت است که ابتدا نام کاربری و ایمیل کاربر را دریافت می کند و سپس آن را در جدول یوزرها ذخیره می کند. بعد یک ایمیل با لینک بازگشتی به ایمیل وارد شده کاربر ارسال می کند تا پس از زدن روی آن و بازگشت به سایت بتواند رمزعبور خود را وارد نماید.

برای مشاهده اطلاعات این فرم کافیست به روت وردپرس و فایل wp-login.php مراجعه کنید. این فایل موارد مختلفی مانند احراز هویت کاربر، ثبت نام کاربر جدید، تغییر رمز عبور، فراموشی رمز و … را هندل می کند.

این فایل سه قسمت اصلی دارد. هدر که در همه ی صفحات موجود است. محتوا که متناسب با صفحه تغییر می کند و فوتر که در همه ی صفحات موجود است. صفحه ای که مدنظر ماست، صفحه ثبت نام (با اکشن register) می باشد. در حال حاضر کاری با فوتر و هدر نداریم و در آینده پیرامون آنها صحبت خواهیم کرد.

برای مشاهده ی کدهای فرم ثبت نام باید به خطوط حوالی 1000 بروید که کیس register را هندل می کند.

 

کدهای فرم ثبت نام پیشفرض وردپرس:

<form name="registerform" id="registerform" action="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login_post' ) ); ?>" method="post" novalidate="novalidate">
	<p>
		<label for="user_login"><?php _e( 'Username' ); ?></label>
		<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr( wp_unslash( $user_login ) ); ?>" size="20" autocapitalize="off" />
	</p>
	<p>
		<label for="user_email"><?php _e( 'Email' ); ?></label>
		<input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr( wp_unslash( $user_email ) ); ?>" size="25" />
	</p>
	<p id="reg_passmail">
		<?php _e( 'Registration confirmation will be emailed to you.' ); ?>
	</p>
	<br class="clear" />
	<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
	<p class="submit">
		<input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Register' ); ?>" />
	</p>
</form>

 

اگر میخواهید این کد را به صورت مستقیم در تابع شورتکد ثبت نام خودتان استفاده کنید چند نکته مهم وجود دارد:

اول اینکه اکشن فرم را باید خالی کنید چون اکنون به صفحه wp-login اشاره دارد.

دوم اینکه مقادیر value یوزرنیم و ایمیل باید متغیرهای تعریف شده در همان صفحه باشند که بعد از ارسال مقدار می گیرند. هدف از این متغیرها این است که زمانی خطایی رخ داد، کاربر لازم نباشد مقادیر قبلی را از ابتدا وارد سازد. (تجربه کاربری بهتر)

توصیه اکید این است که ولیدیشن فرم، سمت کاربر و با زبان جاوااسکریپت انجام گردد تا قبل از صحت ولیدیشن، ارتباط با سرور انجام نگردد.

 

دریافت مقادیر فرم و ذخیره کاربر:

$http_post     = ( 'POST' === $_SERVER['REQUEST_METHOD'] );
if ( $http_post ) {
    if ( isset( $_POST['user_login'] ) &amp;&amp; is_string( $_POST['user_login'] ) ) {
        $user_login = $_POST['user_login'];
    }

    if ( isset( $_POST['user_email'] ) &amp;&amp; is_string( $_POST['user_email'] ) ) {
        $user_email = wp_unslash( $_POST['user_email'] );
    }

    $errors = register_new_user( $user_login, $user_email );

    if ( ! is_wp_error( $errors ) ) {
        $redirect_to = ! empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered';
        wp_safe_redirect( $redirect_to );
        exit();
    }
}

دقت کنید که در کد بالا باید آدرس ریدایرکت را، صفحه لاگین خود قرار دهید.

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

اکنون می تواند با ایمیل یا نام کاربری خود و همچنین رمز عبوری که انتخاب کرده است، وارد سایت شود.

چنانچه می بینید عملیات ثبت کاربر جدید در این مرحله توسط تابع register_new_user انجام می شود که در فایل user.php و فولدر wp-includes تعریف شده است.

 

 

دیدگاهتان را بنویسید

طراحی افزونه وردپرس