در این پست آموزشی قصد داریم ابزارکی(ویجت/Widget) از جنس پیشخوان(Dashboard) وردپرس ایجاد کنیم، توجه داشته باشید که روش ساخت این نوع ویجت با ویجت هایی که در سایدبار وب سایت قرار می دهید کاملا متفاوت است.
پیشخوان وردپرس محل مناسبی برای ارائه گزارش های اجمالی، فنی و دم دستی است، چرا که مدیر وب سایت می تواند به راحتی به آنها دسترسی داشته باشد.
در ابتدا برای اینکه این آموزش رنگ و بوی عملیاتی و کاربردی به خود بگیرد یک سناریو تعریف می کنیم:
- می خواهیم هر زمان که کاربری به سیستم لاگین می کند تاریخ و زمان ورود او را در دیتابیس ذخیره کنیم.
- سپس تاریخ آخرین ورود هر کاربر را در پیشخوان وردپرس به مدیر وب سایت نشان دهیم.
نتیجه نهایی را در تصویر زیر ملاحظه می کنید، چیزی که در انتهای آموزش به آن خواهید رسید.

گام 1: ذخیره تاریخ و زمان ورود کاربر
وردپرس تاریخ ورود کاربران را در هیچ جایی ذخیره نمی کند، بنابراین خودمان باید اینکار را انجام دهیم.
در مطلب آموزشی آشنایی با ساختار جداول در دیتابیس وردپرس گفتیم که وردپرس چندین جدول Meta دارد که از آنها برای ذخیره و نگهداری انواع و اقسام اطلاعات استفاده می کند.
یکی از این جداول wp_usermeta است که برخی مشخصات کاربران در آن ذخیره می شود، ما هم اطلاعات ورود کاربران را در این جدول ثبت می کنیم.
برای این منظور کدهای زیر را در فایل functions.php قرار دهید.
function modiredev_update_login_date( $user_login, $user ) {
update_user_meta( $user->ID, 'last_login_date', time() );
}
add_action( 'wp_login', 'modiredev_update_login_date', 20, 2 );
در صورتی که کاربر با موفقیت به سیستم لاگین کند اکشن هوک wp_login تریگر یا اجرا می شود، در این شرایط با استفاده از تابع update_user_meta جزئیات ورود کاربر را در فیلد last_login_date ذخیره می کنیم.
گام 2: ایجاد ویجت در صفحه پیشخوان
برای اینکه بتوانید در پیشخوان وردپرس یک ویجت اختصاصی داشته باشید لازم است تابع wp_add_dashboard_widget را از طریق اکشن هوک wp_dashboard_setup فراخوانی کنید.
بنابراین کدهای زیر را در ادامه کدهای قبلی به functions.php اضافه نمائید.
function modiredev_last_login_widget(){
if ( current_user_can( 'manage_options' ) ) {
wp_add_dashboard_widget(
'modiredev_last_login_dashboard_widget',
'آخرین ورود کاربران',
'modiredev_render_last_login_widget'
);
}
}
add_action( 'wp_dashboard_setup', 'modiredev_last_login_widget' );
با تابع current_user_can بررسی کردیم فقط کاربرانی که Role یا مجوز مدیریتی دارند بتوانند ویجت آخرین ورود کاربران را مشاهده کنند.
از تابع wp_add_dashboard_widget برای افزودن یک ویجت جدید استفاده کردیم، پارامترهای این تابع به ترتیب عبارتند از:
- widget_id$ : آیدی ویجت که بایستی یکتا و منحصربفرد باشد.
- widget_name$: عنوان ویجت
- callback$: تابعی است که برای نمایش محتوای ویجت استفاده می شود، تابع modiredev_render_last_login_widget را در گام بعد ایجاد می کنیم.
گام 3: نمایش محتوای ویجت
حالا تابع modiredev_render_last_login_widget را با کدهای زیر پیاده سازی می کنیم، پس این تابع را به functions.php اضافه کنید.
function modiredev_render_last_login_widget(){
global $wpdb;
$users = $wpdb->get_results(
"SELECT u.display_name, um.meta_value last_login_date
FROM $wpdb->users u
INNER JOIN $wpdb->usermeta um ON u.ID = um.user_id
WHERE um.meta_key = 'last_login_date'
ORDER BY um.meta_value DESC" );
$date_format = 'j F Y h:m:s';
$jdate_exists = function_exists( 'jdate' );
echo '<ul>';
foreach ( $users as $user ) {
if ( $jdate_exists ) {
$last_login = jdate( $date_format, $user->last_login_date );
} else {
$last_login = date( $date_format, $user->last_login_date );
}
?>
<li>
<?php echo esc_html( $user->display_name . ' در ' . $last_login ); ?>
</li>
<?php
}
echo '</ul>';
}
به کمک آبجکت wpdb و متد get_results یک کوئری سفارشی بر روی جداول wp_users و wp_usermeta اجرا کردیم.
به شرط WHERE دقت داشته باشید، کلید last_login_date در گام اول توسط تابع update_user_meta ایجاد و مقداردهی شده است، این فیلد برای کاربرانی که هنوز به سیستم لاگین نکردند ایجاد نشده است بنابراین این کاربران در لیست ما جایی ندارند.
همچنین لیست کاربران را بر اساس تاریخ ورود از جدید به قدیم مرتب کردیم.
تابع jdate متعلق به افزونه وردپرس فارسی است، بنابراین با تابع function_exists وجود آن را بررسی کردیم، ممکن است افزونه فوق در برخی وب سایت های وردپرسی غیرفعال یا حذف شده باشد.
جمع بندی
کار تمام است، همانطور که ملاحظه کردید ساخت ویجت پیشخوان بسیار ساده است، اینکه چه محتوایی را چگونه و با چه فرمت و ساختاری در اختیار مدیر وب سایت قرار دهید ممکن است کمی چالش برانگیز باشد.