تابع wp_get_current_user در وردپرس
تابع 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() یکی از ابزارهای کلیدی برای کنترل و شخصیسازی تجربه کاربری در وردپرس است. با استفاده از آن، توسعهدهندگان میتوانند محتوایی هوشمند، امن و کاربرمحور ایجاد کنند که با نقشها و وضعیت ورود کاربران بهصورت پویا سازگار شود.
آیا این مطلب برای شما مفید بود ؟




