
در این پست از دنیای وردپرس و برنامه نویسی، آموزشی را آماده کرده ایم تا با کمک آن به سادگی هرچه تمام تر یک فرم عضویت ساده و کامل را در سایت خود پایه ریزی کنید.
همانطور که میدانید مهمترین بخش در ساخت یک فرم نام نویسی، برقراری ارتباط با پایگاه داده است. در این آموزش ما با استفاده از تابع ()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
سلام دوستان. من میخوام یه فرم ثبت نام داخل سایتم بزارم که موقعی ای که مشترک خواست ثبت نام کنه این اطلاعات را ازش بخواد:
نام ونام خانوادگی: نام پدر: ش ش: ش ملی: شماره تماس: ادرس: ایمیل: نوع سرویس: نوع مودم: نحوه اشنایی باشرکت:
لطفا راهنمایی کنید.
توسط محمدرضایی
سلام، برای یه همچین موردی باید اختصاصی کدنویسی کرد. حالا اگه با برنامه نویسی آشنایی ندارید، ایمیل بزنید تا در این رابطه صحبت کنیم…
توسط علی میرزائی
باسلام خدمت آقای میرزایی:من میخوام یه فرم ثبت نام داخل سایتم بزارم که موقعی ای که مشترک خواست ثبت نام کنه این اطلاعات را ازش بخواد:
نام ونام خانوادگی: نام پدر: ش ش: ش ملی: شماره تماس: ادرس: ایمیل: نوع سرویس: نوع مودم: نحوه اشنایی باشرکت:
تشکر
توسط عظيم
با سلام
سپاس
توسط الهام
واقعا ایول دارید !
از عصر تا الان دارم یکی یکی پست هارو مطالعه میکنم مبادا یکیش از دستم در بره 😀
این فرمتون خیلی به دردم خورد یعنی قسمت عالیش پیام های ارورش بود
اگه برای ورود هم مذاشتین عالی تر میشد
الان فرم ورود من action دادم به ورود خود وردپرس که اگه اطلاعات نادرست باشه میره به صفحه لوگین مدیر !
اگه اینو برای ورود طراحی کنین دیگه نمیره به مدیر و کارم را میوفته
توسط رضا
ممنون رضا جان،
ایشالا یکم که سرم خلوت شد، یه آموزش ویدویی کامل از توابع و هک های نام نویسی در وردپرس رو آماده میکنم.
برای فرم ورود، میتونید از تابع wp_signon استفاده کنید. مستندات:
http://tiny.alimir.ir/23توسط علی میرزائی
ممنونم درست شد…
توسط ریحانه
این بخش که گفتین : ” تب “صفات برگه” قالب فرم عضویت” قالب عضویت نداره؟!!!
دقیقا کدوم گزینه رو باید انتخاب کنیم؟!
گزینه هایی که برای من هست توی عکس زیر:
http://www.xum.ir/images/2014/06/08/Untitled4Oz9r.pngتوسط ریحانه
اگه از تمپلیت آخری (بدون هیچ گونه تغییر) در قالبتون استفاده کردید باید همون نام فرم عضویت رو داشته باشه.
توسط علی میرزائی
ممنون از شما قسمت ثبت نام وردپرس و پروفایل کاربر اگه خوب بشه وردپرس خیلی زیباتره . سپاس
توسط تیم طراحی سایت
سلام
چطوری میشه کاری کرد که کاربر بعد از ثبت نام نتونه وارد مدیریت وردپرس بشه فقط از طریق خود سایت بتونه این کارو انجام بده؟؟؟
اخه من سایتی دارم که کاربران عضو بتونن مطلب ارسال کنن همین(یعنی بعد از عضو شدن مدیریت وردپرس همچنان به روی اونا بسته باشه فقط فرم ارسال مطلب داشته باشن)
توسط hassan
سلام،
راه های مختلفی وجود داره:
یکی از این راه ها تعریف یک تغییر مسیر (redirect) بعد از انجام موفقیت آمیز ثبت نام و ورود که معمولا در فرم های اختصاصی به کار گرفته میشن.
یک راه حل دیگه، بررسی ورود و سطح دسترسی کاربرانه که در صورت درست بودن شرط، میتونید اونها رو به یک بخش دیگه تغییر مسیر بدید… به عنوان نمونه:
http://tiny.alimir.ir/Ilhttp://tiny.alimir.ir/ZB
توسط علی میرزائی
ممنون
توسط hassan
منم بلدم نظر تایید کنما اما جواب سوالو نمیدونم لطف میکنی کمک کنی؟
توسط سامی
دوست عزیزم، لطفا کمی صبر داشته باش… (باور کن که من 24 ساعته پشت کامپیوتر نیستم که به درخواست همه دوستان پاسخ بدم.)
تابع wp_insert_user در وردپرس شبکه جواب نمیده. شما باید از توابع WPMU استفاده کنید. نمونه مستندات:
http://tiny.alimir.ir/Lxhttp://tiny.alimir.ir/D9
توسط علی میرزائی
سلام به استاد عزیز علی میرزائی
دستم ب دامنت یه ماهه دمبال همچین اموزشی هستم اما میخام برا وردپرس شبکه اخه خیلی بی معنیه وقتی یکی ثبت نام میکنه میگه ی سایت بده بیاد و این چیزا
میخام یه فرم عادی باشه در صورت امکان هم نیازی به ایمیل نداشته باشه یعنی نره ایمیلشو چک کنه تا وبلاگش فعال بشه
خدا خیرت بده باور کن بدجور دستمو بسته این فرم
توسط سامی
سلام
علی آقا اگه ممکنه همین رو به شکل یه ویدیوی آموزشی بزار تا کسایی که تازه کارند بتونند متوجه بشن که چه کاری باید بکنند البته ناگفته نماند که منم چیز زیادی درباره دستکاری در فایلهای php بلد نیستم .یه آقایی بکن یه آموزش بزار……. با تشکر
توسط ابراهیم
سلام،
والا فعلا که فرصت تهیه آموزش ویدیویی رو ندارم!!! منتها شما اگه مراحل گفته شده رو به دقت دنبال کنید، فک میکنم مشکلی نخواهید داشت…
توسط علی میرزائی
جالب اینجاست که داخل قالبهای یوتم کار نمیکنه
توسط سئو
منطقا نباید مشکلی داشته باشه! براش قالب برگه ساختید؟!؟
توسط علی میرزائی
سلام،وقتتون بخیر…
من برای صرافی که قراره راه اندازی کنم احتیاج به یک فرم ثبت نام دارم که پیشرفته تر از اینا باشه،یعنی میخوام موارد بیشتری رو افراد برای ثبت نام و خرید و فروش ارزش وارد کنند، شما یک فرم ثبت نام برای من درست کنید هزینه اون چقدر میشه؟ میخوام یک افزونه بشه ولی سطح دسترسی خاصی به کاربری داده نشه،میخوام فقط ثبت نام کنند و اطلاعاتی که میخوام رو پر کنند و بعدش بنویسه ثبت نام با موفقیت انجام شد،هزینه این مورد چقدر میشه؟
ممنون میشم برام ایمیل کنید…
تشکر ویژه…
توسط رضایی
سلام بخوایم اول ایمیل برای طرف ارسال بشه بعد از کلیک رو لینک تایید عضو بشه باید چیکار کرد؟
توسط milad
مرسی که جواب ندادی خودم پیدا کردم…
حداقل میگفتی بلد نیستم انقدر اوسگل نمیشدیم…
توسط milad
آقا میلاد عزیز، اینکه من گاها نمیتونم به برخی ایمیل ها یا کامنت های دوستان جواب بدم تنها دلیلش کمبود وقت و زمان کافیه. مسلم که همه چیز رو من نمیدونم! منتها تا که جایی بتونم در خدمت همراهان عزیزمون هستم.
در مورد مشکل شما هم، خوشحالم که خودتون تونستید به جواب برسید…
موفق باشید.
توسط علی میرزائی
سلام ببخشید امکانش هست که با یک پنل مدیریتی در وردپرس یک سایت دو زبانه داشته باشیم؟
توسط nedazare
با سلام. جناب من میخواستم یه فرم ثبت نام داشته باشم که کاربر پس از تکمیل اون، و با زدن دکمه ثبت نام به صفحه پرداخت اینترنتی کلاس (مثلا پی لاین) متصل بشه و بعد از اون برگرده به سایت و شماره پیگیری ببینه. با این فرم شما میشه؟
بهترین راه حل به نظر شما چیه؟ خیلی درگیر این موردم ولی هنوز جواب مناسبی نگرفتم.
با تشکر
توسط رضا
سلام،
به صورت پیشفرض خیر. اول باید یک فرم مخصوص اتصال به درگاه رو طراحی کنید و سپس با تعیین سطح دسترسی (پرمیشن)، تنها به کاربران عضو شده اجازه مشاهده این فرم رو بدید.
همچنین، میتونید از یک ریدایرکت هم در فرم عضویت استفاده کنید تا پس از نام نویسی، کاربر به صفحه دلخواه شما هدایت بشه. (البته باید این رو هم در نظر داشته باشید که ممکنه کاربر قبلا نام نویسی کرده باشه)
موفق باشید.
توسط علی میرزائی
سلام
خسته نباشید
میخوام از افزونه برای ثبت نام در شبکه که کاربر بتونه برای خودش پسورد انتخاب بکنه استفاده نکنم.
ایا میشه از این توضیحات مفید شما بعنوان صفحه ثبت نام استفاده کرد تا کاربرا بتونن ثبت نام بکنن.
توسط علیرضا
سلام،
متأسفانه با سیستم عضوگیری وردپرس شبکه آشنایی ندارم و نمیدونم جواب میده یا نه!!!
توسط علی میرزائی
سلام اقا من اصلا هیچی نفهمیدم و بلد نیستم کسی نیست برام انجام بده ؟
توسط کسری
سلام،
در این آموزش سعی کردیم که مطالب رو خیلی ساده توضیح بدیم! با اینحال اگه با کدنویسی راحت نیستید، میتونید از افزونه استفاده کنید یا سفارش بفرستید تا براتون انجامش بدیم.
توسط علی میرزائی
مرسی از شما….
توسط سریال دانلود
به دردم خورد.سپااااااس
توسط طراحی سایت
سلام ممنون از مطلب مفیدتون
فقط یکم گنگه اگه امکان داره توضیح بدبید که کد ها رو در کجای قالب و در چه فایل یا فایل هایی از قالب باید کپی کنم
توسط طاها
سلام طاها عزیز،
فک میکنم بخش آخر رو کامل مطالعه نکرده باشید!
شما باید کد تکمیلی ارائه شده برای پوسته دوهزار و دوازده رو در یک فایل جدید (با نامی دلخواه و فرمت php) بریزید و سپس این فایل رو در پوشه اصلی قالب 2012 بارگذاری کنید.
جهت استفاده از کد تکمیلی در سایر قالب ها، باید نام کلاس و آی دی سلکتورها رو در کد تکمیلی، به نام کلاس یا آی دی های قالب جدید، تغییر بدید.
توسط علی میرزائی