ساخت افزونه ثبت نام برای وردپرس کاملا اختصاصی
- مقالات آموزشی
- بروزرسانی شده در

اگه فرم عضویت ساده وردپرس برای سایتتون کافی نیست، میتونید یک افزونه واقعی بسازید که فرم ثبتنام اختصاصی، فیلد نام و نام خانوادگی، کنترل خطاها و پیام موفقیت داشته باشه. در این آموزش کل افزونه رو قدمبهقدم میسازیم؛ پس حتی اگه تازه با PHP آشنا شدین، میدونید هر فایل رو کجا بسازید و هر کد چه کاری انجام میده.
کدی که در ادامه میبینید ورودیها رو پاکسازی و اعتبارسنجی میکنه، درخواست فرم رو با nonce بررسی میکنه و حساب تازه رو با نقش امن «مشترک» میسازه. این نمونه برای یادگیری و فرمهای ساده مناسبه، ولی برای انتشار روی سایت پرترافیک باید محدودسازی درخواست، ابزار ضدربات و بررسیهای امنیتی بیشتری به اون اضافه کنید.
آنچه در این مقاله میخوانید
قراره چه افزونهای بسازیم؟
قراره یک افزونه سبک برای نمایش فرم ثبتنام اختصاصی در وردپرس بسازیم. این افزونه با شورتکد کار میکنه. شورتکد یک عبارت کوتاه مثل [mwp_custom_registration] هست که داخل برگه میذارید تا وردپرس فرم رو همونجا نمایش بده.
- فیلدهای نام کاربری، ایمیل، رمز عبور، تکرار رمز، نام و نام خانوادگی
- بررسی امنیتی nonce برای ردکردن درخواستهایی که از فرم مورد انتظار نیومدن
- پاکسازی ورودیها و بررسی اطلاعات تکراری یا نامعتبر
- ساخت کاربر با نقش مشترک و نمایش لینک ورود
- امکان تغییر متنها، فیلدها و ظاهر فرم
برای شروع فقط به دسترسی مدیریت وردپرس، دسترسی فایلهای هاست و یک ویرایشگر متن ساده نیاز دارین. بهتره یک سایت آزمایشی یا نسخه محلی هم داشته باشین تا خطای احتمالی روی سایت اصلی اثر نذاره.
کد داخل functions.php به قالب فعلی وابسته هست و با عوضکردن قالب از دسترس خارج میشه. افزونه مستقل میمونه و مدیریت اون هم راحتتره. اگه میخواید کاربردهای فایل قالب رو بهتر بشناسید، راهنمای ترفندهای فایل functions.php وردپرس رو بخونید.
ساخت افزونه ثبت نام برای وردپرس چه زمانی انتخاب خوبیه؟
راهکار اختصاصی وقتی انتخاب خوبیه که فرم سادهای میخواید، فیلدها و رفتار دقیق اون رو میشناسید و برای نگهداری کد هم وقت دارین. حجم افزونه پایین میمونه و فقط امکانات موردنیاز سایتتون اجرا میشن.
ولی اگه پنل کاربری، ورود پیامکی، تغییر مسیرهای پیشرفته، ویرایش پروفایل یا امکانات آماده میخواید، ساخت همه این بخشها از صفر وقت زیادی میگیره. در این حالت میهن پنل میتونه انتخاب سادهتری باشه. آموزش فعلی برای یک فرم ثبتنام پایه و قابلگسترش نوشته شده و جای یک سامانه کامل مدیریت کاربران رو نمیگیره.
ساخت پنل کاربری بدون کدنویسی با میهن پنل
اگه هدفتون فقط تمرین برنامهنویسی نیست و میخواید سریعتر بخش ورود، ثبتنام و حساب کاربری راه بندازید، میهن پنل میتونه مسیر کوتاهتری جلوی پاتون بذاره. با این افزونه لازم نیست فرم ثبتنام، صفحه ورود، ویرایش پروفایل و داشبورد کاربر رو از صفر کدنویسی کنید.

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

پس اگه فقط یک فرم ساده میخواید و با PHP آشنا هستین، کد همین آموزش نقطه شروع خوبیه. ولی اگه میخواید بدون درگیری با نگهداری کد، فرمهای قابلشخصیسازی و پنل اختصاصی داشته باشین، بهتره صفحه میهن پنل و قابلیتهای نسخه فعلی اون رو ببینید.
قبل از شروع، ثبتنام کاربران رو در وردپرس تنظیم کنید
بررسی تنظیم عضویت عمومی وردپرس
وارد پیشخوان بشید و از مسیر «تنظیمات ← عمومی» گزینه «هر کسی میتونه نامنویسی کنه» رو بررسی کنید. افزونه این آموزش حساب رو مستقیم با wp_insert_user() میسازه و برای کارکردن به فعالبودن این گزینه نیاز نداره. اگه نمیخواید فرم پیشفرض وردپرس مسیر ثبتنام جداگانهای باز کنه، این گزینه رو فقط بهخاطر کد این آموزش فعال نکنید.

انتخاب نقش پیشفرض امن برای کاربران تازه
در همون صفحه، نقش پیشفرض کاربر تازه رو روی «مشترک» بذارید. هیچوقت برای ثبتنام عمومی نقش مدیر، ویرایشگر یا نویسنده رو انتخاب نکنید. کد ما هم نقش subscriber رو صریح مشخص میکنه تا کاربر تازه فقط دسترسی معمول یک عضو رو داشته باشه.
نکتههای مهم قبل از آزمایش افزونه روی سایت اصلی
اول از سایت نسخه پشتیبان بگیرید. بعد کد رو روی سایت آزمایشی اجرا کنید و مطمئن بشید نسخه PHP سایت با وردپرس و افزونههای فعال سازگاره. بهتره دسترسی مدیریت فایل یا FTP هم در اختیارتون باشه تا اگه خطای PHP دیدید، بتونید پوشه افزونه رو تغییرنام بدید و سایت رو برگردونید.
ساخت پوشه و فایل اصلی افزونه ثبتنام
ایجاد پوشه افزونه در مسیر wp-content/plugins
در مدیریت فایل هاست وارد مسیر wp-content/plugins بشید. پوشهای با نام mwp-custom-registration بسازید. بعد داخل اون یک فایل به نام mwp-custom-registration.php ایجاد کنید.
ساخت فایل PHP و نوشتن هدر استاندارد افزونه
هدر افزونه توضیحاتی هست که وردپرس برای شناسایی نام و نسخه افزونه میخونه. فایل رو با <?php شروع کنید و هدر موجود در کد کامل همین آموزش رو داخل اون بذارید.
جلوگیری از اجرای مستقیم فایل با بررسی ABSPATH
ثابت ABSPATH موقع اجرای عادی وردپرس تعریف شده. با بررسی اون، اگه کسی آدرس فایل PHP افزونه رو مستقیم باز کنه، اجرای فایل متوقف میشه.
انتخاب پیشوند یکتا برای جلوگیری از تداخل تابعها
نامهای عمومی مثل registration_form شاید قبلاً توسط قالب یا افزونه دیگهای استفاده شده باشن. برای همین همه تابعهای این آموزش با پیشوند mwpcr_ شروع میشن. اگه کد رو برای پروژه خودتون گسترش میدید، یک پیشوند یکتا انتخاب کنید.
ساخت فرم ثبتنام اختصاصی وردپرس
فرم ما نام کاربری، ایمیل، رمز عبور و تکرار رمز رو بهعنوان اطلاعات ضروری میگیره. نام و نام خانوادگی اختیاری هستن. برای هر فیلد یک label داریم تا کاربر مبتدی و ابزارهای دسترسپذیری بهتر متوجه کاربرد فیلد بشن.
تابع wp_nonce_field() یک مقدار امنیتی موقت داخل فرم میذاره. nonce کمک میکنه درخواستهایی که از فرم مورد انتظار نیومدن رد بشن، ولی مجوز دسترسی، ضداسپم یا محافظ کامل در برابر رباتها نیست.
مقدار نام کاربری، ایمیل، نام و نام خانوادگی بعد از خطا دوباره نمایش داده میشن تا کاربر مجبور نباشه همهچیز رو از اول بنویسه. این مقادیر با esc_attr() برای نمایش داخل ویژگی HTML امن میشن. رمز و تکرار اون دوباره نمایش داده نمیشن، چون نگهداشتن رمز داخل HTML کار درستی نیست.
دریافت و پاکسازی اطلاعات فرم
افزونه اول بررسی میکنه که روش ارسال درخواست POST باشه و دکمه فرم هم ارسال شده باشه. بعد با wp_unslash() اسلشهایی که وردپرس به داده ورودی اضافه کرده برمیداره.
برای نام کاربری از sanitize_user()، برای ایمیل از sanitize_email() و برای نامها از sanitize_text_field() استفاده میکنیم. این تابعها ممکنه بعضی نویسههای نامعتبر رو حذف کنن؛ پس حساب با مقدار پاکسازیشده ساخته میشه. رمز عبور پاکسازی متنی نمیشه، چون تغییر خودکار نویسههای اون شاید رمز انتخابی کاربر رو عوض کنه.
در این نمونه، حالت سختگیرانه sanitize_user() استفاده شده و نام کاربری رو به نویسههای ساده لاتین محدود میکنه. پس برای نام کاربری فارسی طراحی نشده. کاربر همچنان میتونه نام و نام خانوادگی فارسی وارد کنه.
اعتبارسنجی اطلاعات ثبتنام
پاکسازی و اعتبارسنجی یکسان نیستن. پاکسازی داده رو برای استفاده آماده میکنه، ولی اعتبارسنجی بررسی میکنه که داده با قانونهای فرم هماهنگ باشه. افزونه قبل از ساخت حساب، nonce رو با wp_verify_nonce() بررسی میکنه.
بعد خالینبودن فیلدهای ضروری، معتبر بودن نام کاربری، تکرارینبودن نام کاربری و ایمیل، درستبودن قالب ایمیل و یکسانبودن دو رمز بررسی میشه. برای رمز عبور حداقل ۱۲ نویسه در نظر گرفتیم. کد تعداد نویسهها رو با یک الگوی سازگار با متن UTF-8 میشمره تا رمزهای فارسی و نویسههای چندبایتی فقط بر اساس تعداد بایت سنجیده نشن.
نام و نام خانوادگی اختیاری هستن. اگه بعداً فیلد تازهای اضافه کردید، باید برای همون فیلد قانون مناسب بذارید. همه خطاها با WP_Error جمع میشن و بهصورت پیامهای کوتاه و قابلفهم بالای فرم نمایش داده میشن.
ساخت حساب کاربری با wp_insert_user
بعد از عبور اطلاعات از بررسیها، آرایه اطلاعات کاربر آماده میشه. تابع رسمی wp_insert_user حساب رو میسازه و شناسه کاربر یا یک خطای WP_Error برمیگردونه.
نقش کاربر در کد روی subscriber تنظیم شده. اگه ساخت حساب ناموفق باشه، افزونه بهجای نمایش جزئیات فنی، یک پیام ساده نشون میده. اگه حساب ساخته بشه، فرم پنهان میشه و کاربر پیام موفقیت همراه با لینک امن صفحه ورود میبینه.
این نسخه ایمیل خوشآمدگویی یا تأیید ایمیل نمیفرسته و کاربر رو خودکار وارد حساب نمیکنه. اگه به این رفتارها نیاز دارین، باید اونها رو جداگانه و با بررسی امنیتی مناسب پیادهسازی کنید.
ساخت شورتکد برای نمایش فرم ثبتنام
تابع add_shortcode() عبارت [mwp_custom_registration] رو به تابع فرم وصل میکنه. چون تابع شورتکد باید خروجی رو برگردونه، از بافر خروجی با ob_start() و ob_get_clean() استفاده میکنیم.
بعد از فعالکردن افزونه، از مسیر «برگهها ← افزودن برگه تازه» یک برگه با عنوان «ثبتنام» بسازید. یک بلوک شورتکد اضافه کنید، عبارت [mwp_custom_registration] رو داخل اون بذارید و برگه رو منتشر کنید.
کد کامل افزونه ثبتنام وردپرس
نسخه یکپارچه آموزشی کد
<?php/** * Plugin Name: MWP Custom Registration * Description: فرم ثبتنام اختصاصی با شورتکد. * Version: 1.0.0 * Author: Your Name * Text Domain: mwp-custom-registration */if ( ! defined( 'ABSPATH' ) ) { exit;}function mwpcr_render_messages( $errors ) { if ( ! is_wp_error( $errors ) || ! $errors->has_errors() ) { return; } echo '<div class="mwpcr-messages mwpcr-errors" role="alert"><ul>'; foreach ( $errors->get_error_messages() as $message ) { echo '<li>' . esc_html( $message ) . '</li>'; } echo '</ul></div>';}function mwpcr_registration_shortcode() { if ( is_user_logged_in() ) { return '<p>' . esc_html__( 'شما وارد حساب کاربریتون شدین.', 'mwp-custom-registration' ) . '</p>'; } $errors = new WP_Error(); $registered = false; $username = ''; $email = ''; $first_name = ''; $last_name = ''; $password = ''; $confirm_password = ''; if ( 'POST' === strtoupper( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ?? '' ) ) ) && isset( $_POST['mwpcr_submit'] ) ) { $nonce = isset( $_POST['mwpcr_nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['mwpcr_nonce'] ) ) : ''; if ( ! wp_verify_nonce( $nonce, 'mwpcr_register_user' ) ) { $errors->add( 'invalid_nonce', 'درخواست معتبر نیست. صفحه رو تازه کنید و دوباره تلاش کنید.' ); } else { $username = isset( $_POST['mwpcr_username'] ) ? sanitize_user( wp_unslash( $_POST['mwpcr_username'] ), true ) : ''; $email = isset( $_POST['mwpcr_email'] ) ? sanitize_email( wp_unslash( $_POST['mwpcr_email'] ) ) : ''; $password = isset( $_POST['mwpcr_password'] ) ? (string) wp_unslash( $_POST['mwpcr_password'] ) : ''; $confirm_password = isset( $_POST['mwpcr_confirm_password'] ) ? (string) wp_unslash( $_POST['mwpcr_confirm_password'] ) : ''; $first_name = isset( $_POST['mwpcr_first_name'] ) ? sanitize_text_field( wp_unslash( $_POST['mwpcr_first_name'] ) ) : ''; $last_name = isset( $_POST['mwpcr_last_name'] ) ? sanitize_text_field( wp_unslash( $_POST['mwpcr_last_name'] ) ) : ''; if ( '' === $username || '' === $email || '' === $password || '' === $confirm_password ) { $errors->add( 'required_fields', 'نام کاربری، ایمیل و هر دو فیلد رمز عبور رو کامل کنید.' ); } if ( '' !== $username && ! validate_username( $username ) ) { $errors->add( 'invalid_username', 'نام کاربری معتبر نیست. از حروف لاتین، عدد و نویسههای ساده استفاده کنید.' ); } elseif ( '' !== $username && username_exists( $username ) ) { $errors->add( 'username_exists', 'این نام کاربری قبلاً ثبت شده.' ); } if ( '' !== $email && ! is_email( $email ) ) { $errors->add( 'invalid_email', 'یک ایمیل معتبر وارد کنید.' ); } elseif ( '' !== $email && email_exists( $email ) ) { $errors->add( 'email_exists', 'این ایمیل قبلاً استفاده شده.' ); } if ( '' !== $password && '' !== $confirm_password && ! hash_equals( $password, $confirm_password ) ) { $errors->add( 'password_mismatch', 'رمز عبور و تکرار اون یکسان نیستن.' ); } if ( '' !== $password ) { $password_characters = array(); $password_length = preg_match_all( '/./us', $password, $password_characters ); if ( false === $password_length ) { $errors->add( 'invalid_password', 'رمز عبور شامل نویسه نامعتبره.' ); } elseif ( $password_length < 12 ) { $errors->add( 'weak_password', 'رمز عبور باید دستکم ۱۲ نویسه داشته باشه.' ); } } if ( ! $errors->has_errors() ) { $user_id = wp_insert_user( array( 'user_login' => $username, 'user_email' => $email, 'user_pass' => $password, 'first_name' => $first_name, 'last_name' => $last_name, 'role' => 'subscriber', ) ); if ( is_wp_error( $user_id ) ) { $errors->add( 'create_user_failed', 'ساخت حساب انجام نشد. اطلاعات رو بررسی کنید و دوباره تلاش کنید.' ); } else { $registered = true; } } } } ob_start(); if ( $registered ) { ?> <div class="mwpcr-messages mwpcr-success" role="status"> <p>حساب شما با موفقیت ساخته شد. <a href="<?php echo esc_url( wp_login_url() ); ?>">وارد سایت بشید</a>.</p> </div> <?php return ob_get_clean(); } mwpcr_render_messages( $errors ); ?> <form class="mwpcr-form" method="post" action=""> <p> <label for="mwpcr_username">نام کاربری با حروف لاتین *</label> <input id="mwpcr_username" name="mwpcr_username" type="text" value="<?php echo esc_attr( $username ); ?>" autocomplete="username" required> </p> <p> <label for="mwpcr_email">ایمیل *</label> <input id="mwpcr_email" name="mwpcr_email" type="email" value="<?php echo esc_attr( $email ); ?>" autocomplete="email" required> </p> <p> <label for="mwpcr_password">رمز عبور *</label> <input id="mwpcr_password" name="mwpcr_password" type="password" minlength="12" autocomplete="new-password" required> </p> <p> <label for="mwpcr_confirm_password">تکرار رمز عبور *</label> <input id="mwpcr_confirm_password" name="mwpcr_confirm_password" type="password" minlength="12" autocomplete="new-password" required> </p> <p> <label for="mwpcr_first_name">نام</label> <input id="mwpcr_first_name" name="mwpcr_first_name" type="text" value="<?php echo esc_attr( $first_name ); ?>" autocomplete="given-name"> </p> <p> <label for="mwpcr_last_name">نام خانوادگی</label> <input id="mwpcr_last_name" name="mwpcr_last_name" type="text" value="<?php echo esc_attr( $last_name ); ?>" autocomplete="family-name"> </p> <?php wp_nonce_field( 'mwpcr_register_user', 'mwpcr_nonce' ); ?> <p> <button type="submit" name="mwpcr_submit" value="1">ساخت حساب کاربری</button> </p> </form> <?php return ob_get_clean();}add_shortcode( 'mwp_custom_registration', 'mwpcr_registration_shortcode' );محل دقیق قراردادن کد و فعالکردن افزونه
کل کد رو داخل فایل mwp-custom-registration.php بذارید و ذخیره کنید. بعد در پیشخوان به «افزونهها» برید و افزونه «MWP Custom Registration» رو فعال کنید. حالا شورتکد رو داخل برگه ثبتنام بذارید.
بخشهایی از کد که میتونید شخصیسازی کنید
میتونید عنوان فیلدها، متن دکمه و پیامها رو تغییر بدید. تغییر نقش کاربر به سطحهای بالاتر خطرناکه؛ پس برای ثبتنام عمومی همون subscriber رو نگه دارین. قبل از تغییر منطق اعتبارسنجی هم نسخه پشتیبان کد فعلی رو نگه دارین.
آزمایش فرم ثبتنام قدمبهقدم
- در یک مرورگر خصوصی فرم رو با نام کاربری لاتین، ایمیل و رمز درست ارسال کنید.
- یک بار دو رمز متفاوت وارد کنید و نمایش خطای یکساننبودن رمزها رو ببینید.
- رمز کمتر از ۱۲ نویسه و بعد یک رمز ۱۲ نویسهای شامل حروف فارسی یا ایموجی رو آزمایش کنید.
- نام کاربری فارسی رو امتحان کنید و مطمئن بشید محدودیت نام کاربری لاتین برای کاربر روشنه.
- همون نام کاربری و ایمیل رو دوباره وارد کنید و نمایش خطای تکراریبودن رو ببینید.
- فیلدهای ضروری رو خالی بذارید و یک ایمیل اشتباه وارد کنید.
- صفحه فرم رو برای مدتی باز بذارید و بعد ارسال کنید تا رفتار nonce قدیمی رو هم ببینید.
- فرم رو چند بار سریع ارسال کنید. یادتون نره این نسخه محدودسازی درخواست یا ضدربات داخلی نداره.
- در پیشخوان به «کاربران ← همه کاربران» برید و نقش مشترک و اطلاعات حساب رو بررسی کنید.
- از حساب مدیر خارج بشید و فرم رو با قالب و افزونههای امنیتی فعال سایتتون آزمایش کنید.
شخصیسازی افزونه ثبتنام
برای اضافهکردن فیلد تازه، باید ورودی HTML، دریافت داده، پاکسازی، اعتبارسنجی و ذخیره اون رو با هم اضافه کنید. بعضی اطلاعات استاندارد مثل نام و نام خانوادگی مستقیم به wp_insert_user() داده میشن. برای اطلاعات اختصاصی میتونید بعد از ساخت کاربر از update_user_meta() استفاده کنید.
متن دکمه و پیامها مستقیم داخل کد قرار دارن و قابلتغییر هستن. برای هدایت کاربر بعد از ثبتنام هم میتونید منطق تغییر مسیر اضافه کنید، ولی این کار باید قبل از فرستادن خروجی انجام بشه و نشانی مقصد هم باید امن بررسی بشه.
برای تغییر ظاهر، بهتره یک فایل CSS جدا داخل پوشه افزونه بسازید و اون رو با روش استاندارد وردپرس بارگذاری کنید. راهنمای افزودن CSS و جاوا اسکریپت سفارشی به وردپرس مراحل این بخش رو توضیح میده. بهتره منطق PHP و استایل فرم رو در فایلهای جدا نگه دارین.
امنیت و حریم خصوصی فرم ثبتنام
nonce جای ضداسپم، محدودسازی درخواست یا بررسی مجوز رو نمیگیره. برای سایت پرترافیک بهتره محدودسازی تعداد درخواست، ابزار ضدربات معتبر و بررسی ثبتنامهای مشکوک رو هم در نظر بگیرید. انتخاب راهکار دقیق به سرور، ترافیک و نوع کاربران سایتتون بستگی داره و باید قبل از انتشار روی محیط واقعی آزمایش بشه.
فقط اطلاعاتی رو بگیرید که واقعاً لازم دارین. اگه شماره تلفن، نشانی یا اطلاعات شخصی دیگهای جمع میکنید، در سیاست حریم خصوصی توضیح بدید چرا این دادهها رو میگیرید و چطور از اونها استفاده میکنید. افزونه و وردپرس رو هم بهروز نگه دارین و هر تغییر رو اول روی سایت آزمایشی بررسی کنید.
رفع خطاهای رایج افزونه ثبتنام
شورتکد فقط بهصورت متن نمایش داده میشه
اول فعالبودن افزونه رو بررسی کنید. بعد مطمئن بشید شورتکد رو دقیقاً بهشکل [mwp_custom_registration] و داخل بلوک شورتکد گذاشتید.
بعد از ارسال فرم کاربر ساخته نمیشه
پیام بالای فرم رو بخونید و ایمیل، نام کاربری، یکسانبودن دو رمز و طول رمز رو بررسی کنید. اگه پیام عمومی میبینید، گزارش خطای وردپرس و محدودیتهای افزونه امنیتی سایتتون رو فقط روی محیط آزمایشی بررسی کنید.
نام کاربری فارسی ثبت نمیشه
کد این آموزش نام کاربری رو با حالت سختگیرانه پاکسازی میکنه و برای اون حروف لاتین در نظر گرفته شده. برای نمایش نام فارسی میتونید از فیلدهای نام و نام خانوادگی استفاده کنید.
پیام نام کاربری یا ایمیل تکراری نمایش داده میشه
این پیام یعنی حسابی با همون نام کاربری یا ایمیل ثبت شده. از اطلاعات متفاوت استفاده کنید یا حساب قبلی رو از بخش کاربران پیدا کنید. اطلاعات کاربر واقعی رو فقط برای رفع خطای آزمایشی حذف نکنید.
صفحه بعد از فعالکردن افزونه خطای PHP میده
معمولاً یک نویسه جاافتاده، کپی ناقص کد یا ناسازگاری نسخه PHP باعث این خطا میشه. با مدیریت فایل، نام پوشه افزونه رو تغییر بدید تا غیرفعال بشه. بعد کد و گزارش خطا رو روی سایت آزمایشی بررسی کنید.
کاربر تازه دسترسی بیشتری از حد لازم داره
مقدار role در کد باید subscriber باشه. نقش پیشفرض وردپرس رو هم از «تنظیمات ← عمومی» روی مشترک بذارید و نقش حسابهای آزمایشی ساختهشده رو از بخش کاربران بررسی کنید.
جمعبندی
حالا یک افزونه آموزشی دارین که فرم عضویت اختصاصی رو با شورتکد نمایش میده، دادهها رو پاکسازی و اعتبارسنجی میکنه و حساب تازه رو با نقش امن میسازه. مهمترین نکته اینه که فقط ظاهر فرم رو نبینید؛ nonce، امنکردن خروجی، بررسی خطا و تعیین نقش کاربر بخشهای ضروری همین فرایند هستن.
برای یک فرم ساده میتونید همین کد رو با دقت گسترش بدید. برای استفاده عمومی و پرترافیک باید ضدربات، محدودسازی درخواست، گزارش خطای امن و آزمایشهای بیشتری هم اضافه کنید. اگه ورود پیامکی، پنل کاربری کامل و مدیریت آماده پروفایل میخواید، استفاده از راهکار آماده معمولاً سریعتر و قابلمدیریتتره.
سوالات متداول
برای ساخت افزونه ثبت نام وردپرس باید برنامهنویسی بلد باشیم؟
برای کپی و آزمایش همین نمونه، آشنایی خیلی مقدماتی با فایلهای هاست و PHP کافیه. ولی برای اضافهکردن قابلیتهای تازه، رفع خطا و نگهداری امن افزونه بهتره مبانی PHP و توابع وردپرس رو یاد بگیرید.
کد فرم ثبتنام رو داخل functions.php بذاریم یا افزونه بسازیم؟
برای قابلیت ثبتنام بهتره افزونه مستقل بسازید. کد داخل functions.php به قالب وابسته هست و با تعویض قالب شاید از دسترس خارج بشه.
آیا باید گزینه عضویت عمومی وردپرس رو فعال کنیم؟
نه، کد این آموزش حساب رو مستقیم با wp_insert_user میسازه و به این گزینه وابسته نیست. اگه مسیر ثبتنام پیشفرض وردپرس رو لازم ندارین، این گزینه رو فقط بهخاطر افزونه فعال نکنید.
چطور فیلد تازهای به فرم ثبتنام اضافه کنیم؟
باید ورودی HTML فیلد، دریافت داده با wp_unslash، پاکسازی، اعتبارسنجی و مرحله ذخیره اون رو اضافه کنید. برای داده اختصاصی میتونید بعد از ساخت کاربر از update_user_meta استفاده کنید.
چطور نقش کاربران تازه رو مشخص کنیم؟
مقدار role در آرایه wp_insert_user نقش حساب تازه رو مشخص میکنه. برای ثبتنام عمومی بهتره subscriber یا همون مشترک رو نگه دارین تا کاربر دسترسی مدیریتی نگیره.
چرا استفاده از nonce در فرم ثبتنام مهمه؟
nonce کمک میکنه درخواستهایی که از فرم مورد انتظار نیومدن رد بشن. این بررسی مفیده، ولی مجوز دسترسی، ضداسپم یا محافظ کامل در برابر رباتها نیست.
چطور جلوی ثبتنام رباتها رو بگیریم؟
میتونید از ابزار ضدربات معتبر، محدودسازی تعداد درخواست و بررسی الگوهای مشکوک استفاده کنید. راهکار انتخابی رو اول روی سایت آزمایشی بررسی کنید تا کاربران واقعی بیدلیل مسدود نشن.

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