ویژگی تصویر

تابع is_user_logged_in در وردپرس

  /  وردپرس   /  تابع is_user_logged_in در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس
تابع is_user_logged_in() یکی از توابع پرکاربرد در وردپرس است که برای بررسی وضعیت ورود کاربر (login status) استفاده می‌شود. این تابع به توسعه‌دهندگان کمک می‌کند تا محتوای خاص، بخش‌های امنیتی، یا قابلیت‌های سفارشی را فقط برای کاربران وارد شده نمایش دهند. در این آموزش، با نحوه استفاده از این تابع، کاربردهای آن در قالب‌ها و افزونه‌ها، و چند نکته مهم در بهینه‌سازی و امنیت آشنا می‌شویم.

تعریف تابع is_user_logged_in() در وردپرس

این تابع یکی از توابع اصلی هسته وردپرس (Core Function) است و در فایل pluggable.php تعریف شده است. عملکرد آن بسیار ساده است: اگر کاربر در حال حاضر وارد (Logged In) شده باشد، مقدار true برمی‌گرداند و اگر کاربر میهمان باشد، مقدار false را بازمی‌گرداند.

ساختار کلی تابع

bool is_user_logged_in()

خروجی تابع از نوع بولی (Boolean) است. یعنی فقط دو مقدار ممکن دارد:

خروجیتوضیح
trueکاربر وارد حساب کاربری خود شده است.
falseکاربر وارد نشده و به عنوان مهمان شناخته می‌شود.

نحوه استفاده از تابع در قالب‌ها (Themes)

معمولاً از این تابع برای نمایش محتوای خاص به کاربران لاگین‌شده یا مهمان در فایل‌های قالب مانند header.php، single.php یا functions.php استفاده می‌شود.

مثال ساده:


if ( is_user_logged_in() ) {
    echo 'خوش آمدید، کاربر گرامی!';
} else {
    echo 'لطفاً وارد حساب خود شوید.';
}

در این مثال، اگر کاربر وارد سایت شده باشد، پیام خوش‌آمدگویی نمایش داده می‌شود؛ در غیر این صورت، پیام دعوت به ورود ظاهر می‌گردد.

کاربرد در فایل functions.php برای کنترل دسترسی

گاهی نیاز است بخشی از کد فقط برای کاربران لاگین‌شده اجرا شود. به عنوان مثال، اگر بخواهید برخی اسکریپت‌ها فقط برای اعضا بارگذاری شوند:


function custom_scripts_for_logged_in_users() {
    if ( is_user_logged_in() ) {
        wp_enqueue_script( 'member-scripts', get_template_directory_uri() . '/js/member.js', array('jquery'), null, true );
    }
}
add_action( 'wp_enqueue_scripts', 'custom_scripts_for_logged_in_users' );

در این کد، فایل member.js فقط برای کاربران وارد شده لود می‌شود. این روش از بارگذاری غیرضروری اسکریپت‌ها برای بازدیدکنندگان جلوگیری می‌کند و سرعت سایت را افزایش می‌دهد.

کاربرد در افزونه‌ها (Plugins)

در افزونه‌نویسی وردپرس، کنترل وضعیت کاربر برای ایجاد قابلیت‌هایی مانند سیستم امتیازدهی، دیدگاه‌های محدود یا دسترسی ویژه بسیار مفید است.

نمونه کاربرد در افزونه:


function custom_download_link() {
    if ( is_user_logged_in() ) {
        echo '<a href="/downloads/file.zip">دانلود فایل</a>';
    } else {
        echo 'برای دانلود فایل باید وارد شوید.';
    }
}
add_shortcode( 'custom_download', 'custom_download_link' );

در این مثال از شورت‌کد [custom_download] استفاده شده است تا لینک دانلود فقط برای کاربران لاگین‌شده نمایش داده شود.

نکات امنیتی مهم هنگام استفاده از is_user_logged_in()

  • این تابع فقط بررسی می‌کند کاربر لاگین کرده یا خیر، اما سطح دسترسی (Role) او را مشخص نمی‌کند. برای بررسی نقش کاربر باید از current_user_can() استفاده کنید.
  • در کنترل دسترسی به داده‌های حساس، فقط به is_user_logged_in() اکتفا نکنید؛ ترکیب آن با چک کردن نقش کاربری ضروری است.
  • در صفحات AJAX یا REST API، باید قبل از پردازش داده‌ها حتماً وضعیت ورود کاربر بررسی شود تا از درخواست‌های غیرمجاز جلوگیری شود.

مثال ترکیبی با current_user_can():


if ( is_user_logged_in() && current_user_can('administrator') ) {
    echo 'شما مدیر سایت هستید.';
} else {
    echo 'دسترسی غیرمجاز!';
}

در این حالت، تنها کاربرانی که نقش “مدیر” دارند قادر به دیدن پیام خاص خواهند بود.

بررسی وضعیت کاربر در جاوااسکریپت (با کمک PHP)

گاهی لازم است وضعیت ورود کاربر را در سمت کاربر (Front-end) نیز بدانیم. برای این کار، می‌توانیم متغیر PHP را به جاوااسکریپت منتقل کنیم.


function pass_login_status_to_js() {
    wp_localize_script( 'theme-script', 'userStatus', array(
        'logged_in' => is_user_logged_in()
    ) );
}
add_action( 'wp_enqueue_scripts', 'pass_login_status_to_js' );

اکنون در فایل جاوااسکریپت خود می‌توانید مقدار userStatus.logged_in را بررسی کنید و بر اساس آن رفتار متفاوتی نمایش دهید.

اشتباهات رایج در استفاده از is_user_logged_in()

  • اشتباه ۱: استفاده از تابع در فایل‌هایی خارج از محیط وردپرس (مثل فایل PHP جداگانه). این تابع فقط زمانی کار می‌کند که محیط وردپرس به طور کامل بارگذاری شده باشد.
  • اشتباه ۲: بررسی وضعیت کاربر در زمان بسیار زود هنگام (مثل قبل از init). در برخی موارد، کوکی‌های ورود هنوز بارگذاری نشده‌اند و مقدار نادرست برمی‌گردد.
  • اشتباه ۳: استفاده از آن برای کنترل دسترسی بدون چک نقش کاربر.

راه‌حل بهینه:


add_action( 'init', 'check_user_login_status' );
function check_user_login_status() {
    if ( is_user_logged_in() ) {
        // انجام عملیات مورد نیاز
    }
}

در این روش، بررسی پس از بارگذاری کامل وردپرس انجام می‌شود و نتیجه دقیق‌تری ارائه می‌دهد.

کاربردهای خلاقانه تابع is_user_logged_in()

  • نمایش محتوای VIP: می‌توانید بخشی از محتوا را فقط برای اعضا نمایش دهید.
  • شخصی‌سازی ناوبری: نمایش لینک‌های خاص مثل “پروفایل من” یا “خروج” فقط برای کاربران وارد شده.
  • افزایش امنیت: جلوگیری از دسترسی به فرم‌های خاص (مثل ارسال پست) برای کاربران ناشناس.
  • افزودن فیلتر در کوئری‌ها: برای نمایش پست‌های شخصی‌سازی‌شده بر اساس وضعیت کاربر.

مثال نمایش منوی سفارشی:


function custom_menu_items($items, $args) {
    if ( is_user_logged_in() ) {
        $items .= '<li><a href="/profile">پروفایل</a></li>';
    } else {
        $items .= '<li><a href="/login">ورود</a></li>';
    }
    return $items;
}
add_filter( 'wp_nav_menu_items', 'custom_menu_items', 10, 2 );

این کد منوی ناوبری سایت را بر اساس وضعیت ورود کاربر تغییر می‌دهد.

مقایسه is_user_logged_in() با توابع مشابه

تابعکاربردتوضیح
is_user_logged_in()بررسی ورود کاربرفقط وضعیت ورود را مشخص می‌کند، بدون بررسی نقش
current_user_can()بررسی نقش و دسترسیبرای تعیین اینکه کاربر چه مجوزهایی دارد استفاده می‌شود
get_current_user_id()دریافت شناسه کاربر وارد شدهدر صورت ورود، شناسه عددی کاربر را برمی‌گرداند؛ در غیر این صورت ۰

جمع‌بندی

تابع is_user_logged_in() یکی از ساده‌ترین اما قدرتمندترین ابزارها در وردپرس برای کنترل وضعیت کاربران است. این تابع در طراحی قالب، افزونه‌نویسی، امنیت، و بهینه‌سازی تجربه کاربری نقش مهمی دارد. با ترکیب این تابع با توابعی مانند current_user_can() و get_current_user_id() می‌توانید سیستم‌های پیچیده و امنی برای سایت خود ایجاد کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: