ساخت فرم نام نویسی کامل در وردپرس

فرم عضویت وردپرس بدون استفاده از پلاگین

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

فرم کلی تابع wp_insert_user:

<?php wp_insert_user( $userdata ) ?>

اما پیش از استفاده از تابع بالا و کدنویسی سمت سرور، ابتدا لازم است تا یک فرم با تعدادی فیلد ورودی (input) و یک دکمه ارسال (button) بسازیم. این کار را ما به صورت زیر انجام دادیم:

<form method="post">
	<h3>آیا قبلا عضو نشده اید؟<br/> نام نویسی کنید.</h3>
	<p><label>نام</label></p>
	<p><input type="text" value="" name="first_name" id="first_name" /></p>		
	<p><label>نام خانوادگی</label></p>
	<p><input type="text" value="" name="last_name" id="last_name" /></p>
	<p><label>ایمیل</label></p>
	<p><input type="text" value="" name="email" id="email" /></p>
	<p><label>نام کاربری</label></p>
	<p><input type="text" value="" name="username" id="username" /></p>
	<p><label>رمز عبور</label></p>
	<p><input type="password" value="" name="pwd1" id="pwd1" /></p>
	<p><label>تکرار رمز عبور</label></p>
	<p><input type="password" value="" name="pwd2" id="pwd2" /></p>
	<button type="submit" name="btnregister" >بفرست!</button>
	<input type="hidden" name="task" value="register" />
</form>

پس از انجام مرحله قبل، می رسیم به مهمترین بخش کار، یعنی دریافت و پردازش اطلاعات ارسالی از فرم html بالا.
برای این منظور از قطعه کد پی اچ پی زیر استفاده میکنیم. این اسکریپت ضمن دریافت و پردازش اطلاعات با داشتن تعدادی دستور شرطی، تک تک مراحل کار را کنترل کرده و پیغام هایی را در هر شرط مشخص می کند. ( در مرحله بعد، از این پیغام ها با شرط خالی نبودن متغیرها ( مثلا: ! empty($success) ) استفاده خواهیم کرد)

<?php
	$err = '';
	$success = '';

	global $wpdb, $PasswordHash, $current_user, $user_ID;

	if(isset($_POST['task']) && $_POST['task'] == 'register' ) {

		$pwd1 = $wpdb->escape(trim($_POST['pwd1']));
		$pwd2 = $wpdb->escape(trim($_POST['pwd2']));
		$first_name = $wpdb->escape(trim($_POST['first_name']));
		$last_name = $wpdb->escape(trim($_POST['last_name']));
		$email = $wpdb->escape(trim($_POST['email']));
		$username = $wpdb->escape(trim($_POST['username']));

		if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "" || $first_name == "" || $last_name == "") {
			$err = 'لطفا تمامی فیلدهای الزامی را تکمیل نمایید.';
		} else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
			$err = 'آدرس ایمیل نامعتبر است!';
		} else if(email_exists($email) ) {
			$err = 'این ایمیل قبلا در سایت ثبت شده است.';
		} else if($pwd1 <> $pwd2 ){
			$err = 'کلمات عبور با یکدیگر مطابقت ندارند.';		
		} else {

			$user_id = wp_insert_user( array ('first_name' => apply_filters('pre_user_first_name', $first_name), 'last_name' => apply_filters('pre_user_last_name', $last_name), 'user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
			if( is_wp_error($user_id) ) {
				$err = 'خطایی در ارسال درخواست نام نویسی شما رخ داده است!';
			} else {
				do_action('user_register', $user_id);

				$success = 'نام نویسی شما با موفقیت به اتمام رسید، از شما ممنویم.';
			}

		}

	}
	?>

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

  • از یک استایل جهت زیبا سازی بیشتر فیلدهای ورودی.
  • برچسب ها و توابع لازم به کار رفته در پوسته ۲۰۱۲.
  • و یک دایو مربوط به چاپ پیغام های ضروری که در بالا اشاره شد.

استفاده شده است.

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

<?php
/*
Template Name: فرم عضویت
*/
?>
<style>
form label {
	display: block;
	font-weight: bold;
}
form input[type="text"], form input[type="password"] {
	border: 1px solid #F0F0F0;
	border-radius: 5px;
	-moz-box-shadow: 1px 1px #FFF, 1px 1px 1px #aaa inset;
	-webkit-box-shadow: 1px 1px #FFF, 1px 1px 1px #aaa inset;
	box-shadow: 1px 1px #FFF, 1px 1px 1px #aaa inset;
	padding: 10px 7px;
	width: 50%;
	background: #FFF;
	margin-top: 5px;
	font-family: Tahoma, Geneva, sans-serif;
	font-size: 15px;
	font-weight: bold;
	color: #666;
}
</style>
<?php get_header(); ?>
<?php
	$err = '';
	$success = '';

	global $wpdb, $PasswordHash, $current_user, $user_ID;

	if(isset($_POST['task']) && $_POST['task'] == 'register' ) {

		$pwd1 = $wpdb->escape(trim($_POST['pwd1']));
		$pwd2 = $wpdb->escape(trim($_POST['pwd2']));
		$first_name = $wpdb->escape(trim($_POST['first_name']));
		$last_name = $wpdb->escape(trim($_POST['last_name']));
		$email = $wpdb->escape(trim($_POST['email']));
		$username = $wpdb->escape(trim($_POST['username']));

		if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "" || $first_name == "" || $last_name == "") {
			$err = 'لطفا تمامی فیلدهای الزامی را تکمیل نمایید.';
		} else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
			$err = 'آدرس ایمیل نامعتبر است!';
		} else if(email_exists($email) ) {
			$err = 'این ایمیل قبلا در سایت ثبت شده است.';
		} else if($pwd1 <> $pwd2 ){
			$err = 'کلمات عبور با یکدیگر مطابقت ندارند.';		
		} else {

			$user_id = wp_insert_user( array ('first_name' => apply_filters('pre_user_first_name', $first_name), 'last_name' => apply_filters('pre_user_last_name', $last_name), 'user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
			if( is_wp_error($user_id) ) {
				$err = 'خطایی در ارسال درخواست نام نویسی شما رخ داده است!';
			} else {
				do_action('user_register', $user_id);

				$success = 'نام نویسی شما با موفقیت به اتمام رسید، از شما ممنویم.';
			}

		}

	}
	?>
<div id="primary" class="site-content">
  <div id="content" role="main">
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	  <header class="entry-header">
		<h1 class="entry-title"><?php the_title(); ?></h1>
	  </header>
      <div class="entry-content">
        <?php the_content(); ?>
        <div id="message">
          <?php 
			if(! empty($err) ) :
				echo '<p class="error">'.$err.'</p>';
			endif;
		?>
          <?php 
			if(! empty($success) ) :
				echo '<p class="error">'.$success.'</p>';
			endif;
		?>
        </div>
        <form method="post">
          <h4>آیا قبلا عضو نشده اید؟<br/>
            نام نویسی کنید.</h4>
          <p>
            <label>نام</label>
          </p>
          <p>
            <input type="text" value="" name="first_name" id="first_name" />
          </p>
          <p>
            <label>نام خانوادگی</label>
          </p>
          <p>
            <input type="text" value="" name="last_name" id="last_name" />
          </p>
          <p>
            <label>ایمیل</label>
          </p>
          <p>
            <input type="text" value="" name="email" id="email" />
          </p>
          <p>
            <label>نام کاربری</label>
          </p>
          <p>
            <input type="text" value="" name="username" id="username" />
          </p>
          <p>
            <label>رمز عبور</label>
          </p>
          <p>
            <input type="password" value="" name="pwd1" id="pwd1" />
          </p>
          <p>
            <label>تکرار رمز عبور</label>
          </p>
          <p>
            <input type="password" value="" name="pwd2" id="pwd2" />
          </p>
          <button type="submit" name="btnregister" class="button" >بفرست!</button>
          <input type="hidden" name="task" value="register" />
        </form>
      </div>
      <footer class="entry-meta">
        <?php edit_post_link( __( 'Edit', 'twentytwelve' ), '<span class="edit-link">', '</span>' ); ?>
      </footer>
      <!-- .entry-meta --> 
    </article>
    <?php endwhile; ?>
    <?php endif; ?>
  </div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

سورس کدها: sutanaryan.com

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

دیدگاه کاربران در مورد این نوشته

  1. ممنون از سایتتون

    توسط تور دقیقه 90 پاسخ

  2. سلام . خیلی خیلی ممنون بابت آموزش خوبتون . من دو تا سوال داشتم.
    1. اول اینکه چجوری تنظیم کنم بعد از ثبت نام به صفحه پروفایل منتقل بشه .
    2. دوم اینکه چجوری فرم ورود رو هم شخصی سازی کنم؟

    توسط مصطفی پاسخ

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

      توسط سیداحمد پاسخ

  3. تشکر عالی بود

    توسط سئو پاسخ

  4. خیلی مفید بود ممنون

    توسط گلنار پاسخ

  5. خیلی خوب بود مرسی

    توسط حس بویایی پاسخ

  6. آموزنده بود .ممنون

    توسط آزیتا پاسخ

  7. آموزنده بود.ممنون

    توسط آزیتا پاسخ

  8. سلام کسی هست یک فرم عضویت برای من طراحی کنه؟
    فقط نام کاربر رو میخوام با رمز ورود و شماره موبایلش همین!

    توسط سجاد پاسخ

    1. دوست دارید فرمتون چه کاری انجام بده. چرا از فرم تماس 7 استفاده نمیکنید؟ یا افزونه فرم ساز گرویتی فرمز یا افزونه فرم ساز Wpforms یا افزونه فرم ساز کیوفرمز که همه به جز دبلیوپی فرمز درگاه پرداخت هم دارند.

      توسط سیداحمد پاسخ

  9. سلام .
    ببخشید من می خواهم وقتی بازدید کنندگان می خواهن تبت نام کنند ومشخصاتشان را می نویسند و روی کلید بفرست کلیک می کنند مشخصاتشان به gmail من ارسال شود .
    من باید چه کنم
    نکته:من از نرم افزار front pare استفاده می کنم

    توسط اروین پاسخ

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

    توسط روشنک پاسخ

  11. سلام. من یه سایت فروش پوشاک دارم.یه فرم ثبت نام از مشتری لازم دارم که یه سری مشخصات از مشتری بگیره. وبعد از اون مشتری با نام کاربری خودش به فروشگاه بره و خریدشو انجام بده. بعداز پرداخت .مبلغ خریدش به نام خودش ثبت بشه یعنی مدیر بتونه بفهمه هر مشتری چه مبلغی خرید کرده.با برنامه نویسی اشنانیستم.افزونه ای هم برای ووکامرس پیدا نکردم. چطور میشه از شما بخام برام انجامش بدین.؟فقط خیلی زمانم کمه.مرسی

    توسط محم پاسخ

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

      توسط سیداحمد پاسخ

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

    توسط محمد مهدی عالمی پاسخ

    1. اگه با کدنویسی اشنایی ندارید می توانید از افزونه هایی که مربوط به ثبت نام می شوند استفاده کنید ، با یک سرچ ساده می توانید با انتخاب های زیادی مواجه شوید

      توسط امین میرزائی پاسخ

  13. سلام برای دکمه ثبت از چه کدی استفاده میشه

    توسط shimaa پاسخ

    1. سلام. در این کد از تگ button استفاده شده. ولی میتونید از تگ input با نوع submit هم استفاده کنید.

      توسط علی میرزائی پاسخ

  14. سلام دوست عزیز،
    کد هست که بشه با همین فرم ثبت نام تصویر پروفایل،آدرس وبسایت و بیوگرافی رو اضافه کرد؟

    توسط علیرضا پاسخ

  15. سلام و خسته نباشید
    عالی بود

    توسط امیر پاسخ

  16. کد رو کجا وارد کنیم تا کار کنه

    توسط سید مهدی پاسخ

  17. سلا خسته نباشید.
    یه پروژه دارم واسه درس دانشگاه خودمه.میخواستم ببینم شما میتونین انجام بدین؟؟

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

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

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

    توسط mchm پاسخ

دیدگاه خود را بیان کنید