ثبت نام در وردپرس فقط با ایمیل‌های خاص (مثلاً Gmail و Yahoo) بدون افزونه

آخرین بروزرسانی در تاریخ جولای 28, 2026 توسط PersiaWebAdmin

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

چرا محدود کردن دامنه ایمیل یک ضرورت امنیتی و تجاری است؟

بسیاری از مدیران سایت به اشتباه تصور می‌کنند که هر چه تعداد کاربران ثبت‌نام‌کرده بیشتر باشد، موفق‌تر هستند. اما واقعیت این است که کاربران فیک و ایمیل‌های یکبارمصرف (Disposable Emails) جز آسیب هیچ سودی ندارند:

  • افزایش ریسک امنیتی: ایمیل‌های موقت معمولاً توسط ربات‌ها برای ثبت‌نام انبوه و سپس اجرای حملات Brute Force یا هرزنامه‌پراکنی استفاده می‌شوند.
  • آلودگی پایگاه داده: حجم انبوه کاربران بی‌ارزش، فضای هاست را اشغال کرده و کارایی کوئری‌های دیتابیس را کاهش می‌دهد.
  • آسیب به اعتبار دامنه: ارسال ایمیل‌های اطلاع‌رسانی و خبرنامه به آدرس‌های فیک، نرخ Bounce را بالا می‌برد و فرستنده شما را در لیست سیاه قرار می‌دهد.
  • کاهش نرخ تبدیل واقعی: اگر کسب‌وکار شما به فروش یا جذب مشتری واقعی وابسته است، ایمیل‌های غیرواقعی آمار شما را گمراه می‌کنند و بودجه بازاریابی را هدر می‌دهند.

با محدود کردن دامنه‌های مجاز، شما یک لایه تصفیه هوشمند ایجاد می‌کنید که تنها افراد واقعی با ایمیل‌های معتبر (مانند Gmail، Yahoo، ایمیل سازمانی و …) اجازه ورود پیدا می‌کنند و باقی در همان قدم اول مسدود می‌شوند.

محدود کردن ثبت نام وردپرس به دامنه های خاص

راه‌حل اصلی: استفاده از هوک register_post برای فیلتر کردن ایمیل

وردپرس یک هوک (hook) قدرتمند به نام register_post دارد که درست پیش از تکمیل فرآیند ثبت‌نام و ذخیره کاربر در دیتابیس اجرا می‌شود. این هوک دسترسی به خطاها (WP_Error) را فراهم می‌کند و به ما اجازه می‌دهد اگر ایمیل ورودی با شرایط ما هم‌خوانی نداشت، ثبت‌نام را متوقف کرده و پیغام خطای مناسب نشان دهیم. در ادامه روش کامل پیاده‌سازی را می‌بینید.

مرحله صفر: چرا حتماً باید از قالب فرزند استفاده کنید؟

اگر مستقیماً فایل functions.php قالب اصلی را ویرایش کنید، با هر بار بروزرسانی قالب تمام زحمات شما از بین می‌رود. قالب فرزند (Child Theme) یک لایه ایمن روی قالب اصلی می‌سازد که تغییرات شما را دائمی نگه می‌دارد. برای ساخت سریع یک قالب فرزند:

  1. در مسیر /wp-content/themes/ یک پوشه جدید مثلاً به نام mytheme-child بسازید.
  2. در آن یک فایل style.css با محتوای زیر ایجاد کنید:
    /*
    Theme Name: MyTheme Child
    Template: mytheme
    */

    (نام پوشه قالب اصلی را به جای mytheme قرار دهید).
  3. یک فایل functions.php خالی بسازید و کد زیر را در ابتدای آن قرار دهید تا استایل‌های والد بارگذاری شوند:
    <?php
    add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
    function my_theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    }

  4. از پیشخوان وردپرس به نمایش > پوسته‌ها بروید و قالب فرزند تازه‌ساخته را فعال کنید.

مرحله ۱: افزودن کد اصلی به functions.php

کد زیر را دقیقاً در انتهای فایل functions.php قالب فرزند خود کپی کنید. این کد کاملاً تست شده و آماده استفاده است:

/**
 * محدود کردن ثبت‌نام وردپرس به دامنه‌های ایمیل مشخص
 *
 * @param string $login نام کاربری
 * @param string $email ایمیل کاربر
 * @param WP_Error $errors شیء خطاهای وردپرس
 */
function persiaweb_limit_email_domains( $login, $email, $errors ) {

    // لیست دامنه‌های مجاز — این آرایه را بر اساس نیاز خود ویرایش کنید
    $allowed_domains = array(
        'gmail.com',
        'yahoo.com',
        'outlook.com',
        'protonmail.com',
        'aol.com',
        'mail.com',
        'icloud.com',
        'yourcompany.com' // دامنه سازمانی نمونه
    );

    $email_domain = strtolower( substr( strrchr( $email, '@' ), 1 ) );

    // اگر دامنه در لیست مجاز وجود نداشت، خطا ثبت کن
    if ( ! in_array( $email_domain, $allowed_domains ) ) {
        $errors->add( 'invalid_email_domain', sprintf(
            __( 'خطا: ثبت‌نام فقط با ایمیل‌های معتبر امکان‌پذیر است. لطفاً از یکی از دامنه‌های زیر استفاده کنید: %s', 'persiaweb' ),
            implode( '، ', $allowed_domains )
        ) );
    }
}
add_action( 'register_post', 'persiaweb_limit_email_domains', 10, 3 );

بررسی جزء‌به‌جزء کد (تا بدانید چه اتفاقی می‌افتد)

  • $allowed_domains: آرایه‌ای از دامنه‌های مجاز. می‌توانید هر تعداد دامنه دلخواه اضافه کنید؛ از Gmail گرفته تا ایمیل سازمانی خاص.
  • strrchr( $email, '@' ): بخش بعد از علامت @ را استخراج می‌کند، مثلاً از user@gmail.com خروجی @gmail.com خواهد بود. سپس با substr(..., 1) خود علامت @ حذف می‌شود.
  • strtolower(): ایمیل را به حروف کوچک تبدیل می‌کند تا مقایسه حساس به بزرگی و کوچکی نباشد.
  • in_array(): بررسی می‌کند آیا دامنه استخراج‌شده در آرایه مجاز وجود دارد یا خیر.
  • $errors->add(): در صورت غیرمجاز بودن، یک خطای قابل ترجمه به همراه لیست دامنه‌های مجاز ثبت می‌کند. این خطا روی صفحه ثبت‌نام به کاربر نشان داده می‌شود.

مرحله ۲: ذخیره، تست و اطمینان از عملکرد

پس از ذخیره فایل، یک مرورگر خصوصی (Incognito) باز کنید و به صفحه ثبت‌نام سایت خود بروید (معمولاً yoursite.com/wp-login.php?action=register). سعی کنید با یک ایمیل غیرمجاز مانند test@10minutemail.com ثبت‌نام کنید. باید پیغام خطای قرمز رنگ شامل لیست دامنه‌های مجاز را ببینید و ثبت‌نام انجام نشود. سپس با یک ایمیل مجاز (مثلاً Gmail) ثبت‌نام را با موفقیت انجام دهید.

سفارشی‌سازی‌های پیشرفته (برای نیازهای خاص)

۱. فقط اجازه ثبت‌نام با دامنه سازمانی خود را بدهید

اگر یک سایت داخلی برای کارمندان دارید، کافی است آرایه را فقط به دامنه شرکت محدود کنید:

$allowed_domains = array( 'yourcompany.com' );

۲. مسدود کردن دامنه‌های خاص (بلک‌لیست) به جای وایت‌لیست

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

$blocked_domains = array( 'mailinator.com', '10minutemail.com', 'guerrillamail.com' );
$email_domain = strtolower( substr( strrchr( $email, '@' ), 1 ) );
if ( in_array( $email_domain, $blocked_domains ) ) {
    $errors->add( 'blocked_email', 'استفاده از ایمیل موقت مجاز نیست.' );
}

۳. اعمال محدودیت روی فرم‌های ثبت‌نام ووکامرس (WooCommerce)

اگر فروشگاه ووکامرسی دارید، هوک register_post روی فرم ثبت‌نام ووکامرس نیز اجرا می‌شود، اما گاهی بهتر است از فیلتر اختصاصی ووکامرس استفاده کنید تا خطاها در جای درست نمایش داده شوند. کد زیر را جایگزین add_action قبلی کنید:

add_filter( 'woocommerce_registration_errors', 'persiaweb_woocommerce_email_restriction', 10, 3 );
function persiaweb_woocommerce_email_restriction( $errors, $username, $email ) {
    $allowed_domains = array( 'gmail.com', 'yahoo.com', 'outlook.com' );
    $email_domain = strtolower( substr( strrchr( $email, '@' ), 1 ) );
    if ( ! in_array( $email_domain, $allowed_domains ) ) {
        $errors->add( 'invalid_email_domain', 'لطفاً از یک ایمیل معتبر استفاده کنید.' );
    }
    return $errors;
}

۴. سازگاری با فرم‌های ثبت‌نام Ultimate Member یا WPForms

افزونه‌های فرم‌ساز معمولاً هوک‌های مخصوص خود را دارند. برای مثال در Ultimate Member می‌توانید از um_submit_form_errors_hook__register استفاده کنید. با این حال، هوک register_post در بسیاری از افزونه‌های استاندارد که از فرآیند ثبت‌نام اصلی وردپرس پیروی می‌کنند، به‌خوبی کار می‌کند. پس ابتدا روش اصلی را تست کنید و در صورت نیاز، از هوک اختصاصی افزونه بهره ببرید.

نکات امنیتی و بهبود عملکرد

  • همیشه از قالب فرزند استفاده کنید تا بروزرسانی قالب تغییری در کدها ایجاد نکند.
  • فعال بودن WP_DEBUG در محیط توسعه: قبل از اعمال تغییرات روی سایت زنده، در یک سایت لوکال یا استیجینگ تست کنید تا اگر خطای PHP رخ داد، آن را ببینید.
  • پیغام خطای شفاف ولی نه لو‌دهنده: لیست دامنه‌های مجاز به کاربر نشان داده می‌شود که خوب است، اما اگر دامنه سازمانی خصوصی دارید، شاید نخواهید آن را علنی کنید. می‌توانید پیغام عمومی‌تری بدهید.
  • ترکیب با Google reCAPTCHA: این کد جلوی ثبت‌نام ربات‌ها را نمی‌گیرد؛ صرفاً دامنه را چک می‌کند. بهتر است هم‌راه با یک کپچای معتبر از آن استفاده کنید.
  • رعایت استاندارد ترجمه: در کد از __( ... , 'textdomain' ) استفاده شده تا اگر سایت شما چندزبانه است یا در آینده نیاز به ترجمه داشت، آماده باشد. می‌توانید textdomain را با نام قالب خود جایگزین کنید.

چک‌لیست نهایی پیش از انتشار

  • [✓] قالب فرزند فعال است و کد در functions.php آن قرار دارد.
  • [✓] آرایه $allowed_domains دقیقاً شامل دامنه‌های مورد نظر شماست.
  • [✓] ثبت‌نام با یک ایمیل غیرمجاز تست شده و خطای مناسب نمایش داده می‌شود.
  • [✓] ثبت‌نام با یک ایمیل مجاز بدون مشکل انجام می‌شود.
  • [✓] در صورت استفاده از ووکامرس، فرم ثبت‌نام آن نیز محدود شده است.
  • [✓] سایت شما همچنان سریع است و هیچ خطایی در debug.log ثبت نشده.

سوالات متداول

آیا این کد روی ثبت‌نام از طریق ورود اجتماعی (Social Login) هم تأثیر دارد؟
خیر. هوک register_post فقط فرم پیش‌فرض وردپرس و افزونه‌هایی که از آن استفاده می‌کنند را پوشش می‌دهد. برای ورود با گوگل یا فیسبوک باید از تنظیمات خود افزونه اجتماعی یا هوک‌های اختصاصی آن بهره ببرید.

چطور می‌توانم کاربران قدیمی با ایمیل‌های نامعتبر را پیدا و حذف کنم؟
می‌توانید یک کوئری SQL از phpMyAdmin اجرا کنید تا کاربران با دامنه‌های غیرمجاز را شناسایی کنید. البته پیش از هرگونه تغییر دستی در دیتابیس، حتماً بک‌آپ کامل تهیه کنید. استفاده از افزونه‌هایی مانند «WP Bulk Delete» نیز راهکاری امن‌تر است.

اگر بخواهم هم‌زمان چند شرط دیگر (مثلاً محدودیت کاراکتر نام کاربری) اعمال کنم، کد خراب می‌شود؟
خیر، می‌توانید توابع دیگری نیز به هوک register_post یا فیلتر registration_errors اضافه کنید. فقط دقت کنید که ترتیب اولویت و خوانایی کد حفظ شود.

آیا می‌توان این کد را از طریق یک افزونه اختصاصی نیز پیاده‌سازی کرد؟
بله، اگر با برنامه‌نویسی افزونه آشنا هستید، می‌توانید یک پلاگین کوچک بسازید و همین کد را در آن قرار دهید. این روش حتی از ویرایش فایل قالب هم ایمن‌تر است چون با تغییر قالب نیز غیرفعال نمی‌شود. ساختار یک افزونه ساده: یک فایل PHP با هدر پلاگین و سپس کد اصلی.

جمع‌بندی

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

برای خرید رپورتاژ آگهی ارزان قیمت و تقویت سئوی خود نیز می‌توانید با کارشناسان ما در تماس باشید.

اشتراک بگذارید :

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

از سال ۲۰۱۳ فعالیت حرفه‌ای خود را در حوزه طراحی وب آغاز کرد و تاکنون بیش از 300 پروژه طراحی سایت و بهینه‌سازی سئو در صنایع مختلف اجرا کرده است. تجربه عملی او در پروژه‌های واقعی، به ویژه در کسب‌وکارهای ایرانی، موجب شده است بتواند راهکارهایی کاملاً کاربردی و بومی برای رشد آنلاین ارائه دهد.

طراحی و توسعه وب‌سایت‌های شرکتی، فروشگاهی و شخصی با تمرکز بر سرعت، امنیت و تجربه کاربری (UX)
استراتژی‌های سئو فنی، on-page و off-page برای افزایش رتبه در نتایج گوگل
تحلیل رقبا، تحقیق کلمات کلیدی و اجرای کمپین‌های تولید محتوا
مشاوره و اجرای رپورتاژ آگهی و لینک‌سازی هدفمند برای بهبود اعتبار دامنه
طراحی کمپین‌های دیجیتال مارکتینگ یکپارچه برای برندهای نوپا و فعال
مطالب آموزشی و مقالات سئویی که توسط بنیامین ولادوست در وبلاگ “پرشیا وب” منتشر می‌شوند، بر پایه جدیدترین الگوریتم‌های گوگل و استانداردهای جهانی تدوین شده‌اند. او به عنوان متخصص مورد اعتماد در حوزه دیجیتال مارکتینگ، تاکنون در بیش از ۲۰ مجموعه آموزشی و ورکشاپ تخصصی سخنرانی و تدریس داشته است. بسیاری از کسب‌وکارهای آنلاین موفق، مسیر رشد خود را با آموزش‌ها و راهنمایی‌های او آغاز کرده‌اند.

تمام راهکارها و خدماتی که توسط بنیامین ولادوست و تیم “پرشیا وب” ارائه می‌شوند، بر پایه صداقت، شفافیت و تحلیل داده‌های واقعی بنا شده‌اند. هدف او ارائه مشاوره‌ای است که نه بر اساس تبلیغات، بلکه بر پایه داده و عملکرد واقعی کسب‌وکارها باشد.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا