ویژگی تصویر

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

  /  وردپرس   /  تابع wp_get_current_user در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع wp_get_current_user() یکی از مهم‌ترین توابع هسته وردپرس است که برای دریافت اطلاعات کاربر فعلی (کسی که وارد سایت شده است) استفاده می‌شود. این تابع در بسیاری از افزونه‌ها و قالب‌ها کاربرد دارد، به‌ویژه زمانی که می‌خواهید تنظیمات یا محتوایی را براساس نقش یا شناسه کاربر تغییر دهید.

ساختار و تعریف تابع wp_get_current_user()

این تابع در فایل pluggable.php از هسته وردپرس تعریف شده و شیئی از کلاس WP_User برمی‌گرداند. ساختار پایه آن به شکل زیر است:

wp_get_current_user()

این تابع هیچ پارامتری نمی‌گیرد و خروجی آن یک شیء از نوع WP_User است که شامل اطلاعات کاربر جاری مانند نام کاربری، ایمیل، نقش‌ها و شناسه کاربری است.

مثال ساده از استفاده تابع

function show_current_user_info() {
    $current_user = wp_get_current_user();
    echo 'Username: ' . $current_user->user_login . '<br>';
    echo 'Email: ' . $current_user->user_email . '<br>';
    echo 'Role: ' . implode(', ', $current_user->roles);
}
add_shortcode('current_user_info', 'show_current_user_info');

در این مثال، تابع wp_get_current_user() اطلاعات کاربر فعلی را گرفته و آن را در خروجی چاپ می‌کند. سپس با استفاده از شورت‌کد [current_user_info] می‌توانید این اطلاعات را در هر برگه یا نوشته‌ای نمایش دهید.

ویژگی‌ها و مقادیر بازگشتی شیء WP_User

شیء بازگشتی از تابع شامل چندین ویژگی مهم است که در جدول زیر نمایش داده شده است:

ویژگیتوضیح
user_loginنام کاربری کاربر فعلی
user_emailایمیل کاربر
user_firstnameنام کوچک کاربر
user_lastnameنام خانوادگی کاربر
rolesآرایه‌ای از نقش‌های کاربر
IDشناسه عددی کاربر در پایگاه داده

نحوه بررسی ورود کاربر با wp_get_current_user()

گاهی لازم است بررسی کنیم آیا کاربر وارد سایت شده است یا خیر. برای این کار می‌توانیم از ویژگی ID استفاده کنیم:

$current_user = wp_get_current_user();
if ( $current_user->ID != 0 ) {
    echo 'کاربر وارد شده است.';
} else {
    echo 'هیچ کاربری وارد نشده است.';
}

در وردپرس، اگر هیچ کاربری وارد نشده باشد، مقدار ID برابر با صفر است. این روش یکی از مطمئن‌ترین روش‌ها برای تشخیص وضعیت ورود کاربر است.

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

تابع is_user_logged_in() نیز برای بررسی ورود کاربر استفاده می‌شود، اما تفاوت آن با wp_get_current_user() در نوع خروجی است.

تابعکاربردخروجی
is_user_logged_in()بررسی ورود کاربرمقدار بولی (true / false)
wp_get_current_user()دریافت اطلاعات کاربر فعلیشیء از کلاس WP_User

نمونه استفاده ترکیبی:

if ( is_user_logged_in() ) {
    $user = wp_get_current_user();
    echo 'سلام ' . esc_html( $user->display_name );
} else {
    echo 'لطفاً وارد حساب کاربری خود شوید.';
}

در این مثال ابتدا بررسی می‌شود که کاربر وارد شده باشد، سپس نام نمایشی او در خروجی چاپ می‌شود. استفاده از esc_html() برای جلوگیری از حملات XSS ضروری است.

استفاده پیشرفته در توسعه افزونه‌ها و قالب‌ها

در توسعه افزونه‌ها، معمولاً نیاز است اطلاعات کاربر را برای کنترل دسترسی، ثبت فعالیت یا شخصی‌سازی محتوا دریافت کنیم. تابع wp_get_current_user() در این شرایط بسیار مفید است.

نمونه کاربرد در شرط نقش کاربر:

$user = wp_get_current_user();
if ( in_array( 'administrator', (array) $user->roles ) ) {
    echo 'شما مدیر سایت هستید.';
} elseif ( in_array( 'editor', (array) $user->roles ) ) {
    echo 'شما ویرایشگر هستید.';
} else {
    echo 'شما دسترسی محدودی دارید.';
}

در اینجا نقش کاربر فعلی بررسی می‌شود تا براساس آن دسترسی خاصی اعمال شود. تبدیل نقش‌ها به آرایه با (array) اطمینان حاصل می‌کند که بتوان از in_array() به‌درستی استفاده کرد.

اشتباهات رایج هنگام استفاده از wp_get_current_user()

  • استفاده قبل از بارگذاری کامل وردپرس: اگر تابع در زمان نامناسب (مثلاً قبل از اکشن init) فراخوانی شود، مقدار اشتباهی برمی‌گرداند.
  • عدم بررسی ورود کاربر: استفاده مستقیم از ویژگی‌ها بدون بررسی ورود ممکن است منجر به خطا شود.
  • عدم پاک‌سازی خروجی: چاپ مستقیم داده‌ها بدون esc_html() یا esc_attr() می‌تواند آسیب‌پذیری امنیتی ایجاد کند.

نمونه اشتباه:

$user = wp_get_current_user();
echo 'Hello ' . $user->display_name; // ممکن است خطا دهد اگر کاربر وارد نشده باشد

نمونه اصلاح‌شده:

$user = wp_get_current_user();
if ( $user->ID ) {
    echo 'Hello ' . esc_html( $user->display_name );
}

در نسخه اصلاح‌شده، ابتدا بررسی می‌شود که کاربر وارد شده است، سپس داده خروجی به صورت امن چاپ می‌شود.

کاربرد در AJAX و REST API

تابع wp_get_current_user() حتی در درخواست‌های AJAX یا REST API نیز قابل استفاده است، به شرطی که احراز هویت به‌درستی انجام شود. برای مثال، در یک اکشن AJAX که فقط کاربران واردشده باید بتوانند آن را اجرا کنند:

add_action( 'wp_ajax_save_data', 'handle_save_data' );

function handle_save_data() {
    $user = wp_get_current_user();
    if ( ! $user->ID ) {
        wp_send_json_error( 'Unauthorized user' );
    }

    // ادامه پردازش داده
    wp_send_json_success( 'Data saved for user ' . $user->user_login );
}

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

نکات امنیتی در استفاده از wp_get_current_user()

  • هیچ‌گاه از اطلاعات خام کاربر در خروجی بدون پاک‌سازی استفاده نکنید.
  • در صورتی که داده را در HTML قرار می‌دهید، از esc_html() و esc_attr() استفاده کنید.
  • اگر داده را در JavaScript چاپ می‌کنید، از wp_json_encode() برای تبدیل امن استفاده کنید.

جمع‌بندی کاربردها

  • دریافت اطلاعات کاربر فعلی واردشده
  • تشخیص نقش‌ها و سطح دسترسی
  • نمایش اطلاعات شخصی‌سازی‌شده در قالب‌ها
  • اعتبارسنجی کاربر در درخواست‌های AJAX و REST API
  • استفاده در شورت‌کدها یا ویجت‌های اختصاصی

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

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

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