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

دسته‌ها : هک ها و کدها, وردپرس علی میرزائی 78 دیدگاه‌ها

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

در این پست از دنیای وردپرس و برنامه نویسی، آموزشی را آماده کرده ایم تا با کمک آن به سادگی هرچه تمام تر یک فرم عضویت ساده و کامل را در سایت خود پایه ریزی کنید.
همانطور که میدانید مهمترین بخش در ساخت یک فرم نام نویسی، برقراری ارتباط با پایگاه داده است. در این آموزش ما با استفاده از تابع ()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. سلام دوستان. من میخوام یه فرم ثبت نام داخل سایتم بزارم که موقعی ای که مشترک خواست ثبت نام کنه این اطلاعات را ازش بخواد:
    نام ونام خانوادگی: نام پدر: ش ش: ش ملی: شماره تماس: ادرس: ایمیل: نوع سرویس: نوع مودم: نحوه اشنایی باشرکت:
    لطفا راهنمایی کنید.

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

    1. سلام، برای یه همچین موردی باید اختصاصی کدنویسی کرد. حالا اگه با برنامه نویسی آشنایی ندارید، ایمیل بزنید تا در این رابطه صحبت کنیم…

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

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

        توسط عظيم پاسخ

  2. با سلام
    سپاس

    توسط الهام پاسخ

  3. واقعا ایول دارید !
    از عصر تا الان دارم یکی یکی پست هارو مطالعه میکنم مبادا یکیش از دستم در بره 😀

    این فرمتون خیلی به دردم خورد یعنی قسمت عالیش پیام های ارورش بود
    اگه برای ورود هم مذاشتین عالی تر میشد

    الان فرم ورود من action دادم به ورود خود وردپرس که اگه اطلاعات نادرست باشه میره به صفحه لوگین مدیر !
    اگه اینو برای ورود طراحی کنین دیگه نمیره به مدیر و کارم را میوفته

    توسط رضا پاسخ

    1. ممنون رضا جان،
      ایشالا یکم که سرم خلوت شد، یه آموزش ویدویی کامل از توابع و هک های نام نویسی در وردپرس رو آماده میکنم.
      برای فرم ورود، میتونید از تابع wp_signon استفاده کنید. مستندات:
      http://tiny.alimir.ir/23

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

  4. ممنونم درست شد…

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

  5. این بخش که گفتین : ” تب “صفات برگه” قالب فرم عضویت” قالب عضویت نداره؟!!!
    دقیقا کدوم گزینه رو باید انتخاب کنیم؟!
    گزینه هایی که برای من هست توی عکس زیر:
    http://www.xum.ir/images/2014/06/08/Untitled4Oz9r.png

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

    1. اگه از تمپلیت آخری (بدون هیچ گونه تغییر) در قالبتون استفاده کردید باید همون نام فرم عضویت رو داشته باشه.

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

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

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

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

    توسط hassan پاسخ

    1. سلام،
      راه های مختلفی وجود داره:
      یکی از این راه ها تعریف یک تغییر مسیر (redirect) بعد از انجام موفقیت آمیز ثبت نام و ورود که معمولا در فرم های اختصاصی به کار گرفته میشن.
      یک راه حل دیگه، بررسی ورود و سطح دسترسی کاربرانه که در صورت درست بودن شرط، میتونید اونها رو به یک بخش دیگه تغییر مسیر بدید… به عنوان نمونه:
      http://tiny.alimir.ir/Il
      http://tiny.alimir.ir/ZB

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

    2. ممنون

      توسط hassan پاسخ

  8. منم بلدم نظر تایید کنما اما جواب سوالو نمیدونم لطف میکنی کمک کنی؟

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

    1. دوست عزیزم، لطفا کمی صبر داشته باش… (باور کن که من 24 ساعته پشت کامپیوتر نیستم که به درخواست همه دوستان پاسخ بدم.)
      تابع wp_insert_user در وردپرس شبکه جواب نمیده. شما باید از توابع WPMU استفاده کنید. نمونه مستندات:
      http://tiny.alimir.ir/Lx
      http://tiny.alimir.ir/D9

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

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

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

  10. سلام
    علی آقا اگه ممکنه همین رو به شکل یه ویدیوی آموزشی بزار تا کسایی که تازه کارند بتونند متوجه بشن که چه کاری باید بکنند البته ناگفته نماند که منم چیز زیادی درباره دستکاری در فایلهای php بلد نیستم .یه آقایی بکن یه آموزش بزار……. با تشکر

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

    1. سلام،
      والا فعلا که فرصت تهیه آموزش ویدیویی رو ندارم!!! منتها شما اگه مراحل گفته شده رو به دقت دنبال کنید، فک میکنم مشکلی نخواهید داشت…

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

  11. جالب اینجاست که داخل قالبهای یوتم کار نمیکنه

    توسط سئو پاسخ

    1. منطقا نباید مشکلی داشته باشه! براش قالب برگه ساختید؟!؟

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

  12. سلام،وقتتون بخیر…

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

    ممنون میشم برام ایمیل کنید…

    تشکر ویژه…

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

  13. سلام بخوایم اول ایمیل برای طرف ارسال بشه بعد از کلیک رو لینک تایید عضو بشه باید چیکار کرد؟

    توسط milad پاسخ

    1. مرسی که جواب ندادی خودم پیدا کردم…
      حداقل میگفتی بلد نیستم انقدر اوسگل نمیشدیم…

      توسط milad پاسخ

      1. آقا میلاد عزیز، اینکه من گاها نمیتونم به برخی ایمیل ها یا کامنت های دوستان جواب بدم تنها دلیلش کمبود وقت و زمان کافیه. مسلم که همه چیز رو من نمیدونم! منتها تا که جایی بتونم در خدمت همراهان عزیزمون هستم.
        در مورد مشکل شما هم، خوشحالم که خودتون تونستید به جواب برسید…
        موفق باشید.

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

  14. سلام ببخشید امکانش هست که با یک پنل مدیریتی در وردپرس یک سایت دو زبانه داشته باشیم؟

    توسط nedazare پاسخ

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

    توسط رضا پاسخ

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

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

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

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

    1. سلام،
      متأسفانه با سیستم عضوگیری وردپرس شبکه آشنایی ندارم و نمیدونم جواب میده یا نه!!!

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

  17. سلام اقا من اصلا هیچی نفهمیدم و بلد نیستم کسی نیست برام انجام بده ؟

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

    1. سلام،
      در این آموزش سعی کردیم که مطالب رو خیلی ساده توضیح بدیم! با اینحال اگه با کدنویسی راحت نیستید، میتونید از افزونه استفاده کنید یا سفارش بفرستید تا براتون انجامش بدیم.

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

  18. مرسی از شما….

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

  19. به دردم خورد.سپااااااس

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

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

    توسط طاها پاسخ

    1. سلام طاها عزیز،
      فک میکنم بخش آخر رو کامل مطالعه نکرده باشید!
      شما باید کد تکمیلی ارائه شده برای پوسته دوهزار و دوازده رو در یک فایل جدید (با نامی دلخواه و فرمت php) بریزید و سپس این فایل رو در پوشه اصلی قالب 2012 بارگذاری کنید.
      جهت استفاده از کد تکمیلی در سایر قالب ها، باید نام کلاس و آی دی سلکتورها رو در کد تکمیلی، به نام کلاس یا آی دی های قالب جدید، تغییر بدید.

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

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