web-dev-qa-db-ja.com

最後のログインと最後の訪問の追跡

以下のコードを使用して、ユーザーが最後にログインした時間を追跡しています。Remember Meオプションをチェックすると、最後のvisitが追跡されないことに気付きました。

// Catch the time they login and save it
function set_last_login($login) {
  $user = get_userdatabylogin($login);
  update_usermeta( $user->ID, 'last_login', current_time('mysql') );
}
add_action('wp_login', 'set_last_login');

// Function to display the time
function get_last_login($user_id) {
  $last_login = get_user_meta($user_id, 'last_login', true);
  $date_format = get_option('date_format') . ' ' . get_option('time_format');
  $the_last_login = mysql2date($date_format, $last_login, false);
  return $the_last_login;
}

ログインを追跡するための上記の作業コードに加えて、ユーザーが最後にアクティブだった時間を確認しようとしています既にログインしている場合

任意のヒント?

2
Pat

ユーザーのメタデータ用に新しいエントリを作成して、管理ページの読み込みごとに更新することができます。

以下をあなたのテーマのfunctions.phpに入れるか、あるいはプラグインにラップしてください。

function update_last_action_time() {
    $user = wp_get_current_user();
    update_user_meta($user->ID, 'last_action_time', current_time('mysql'));
}
add_action('admin_init', 'update_last_action_time');

もちろん、これを特定のページ、たとえばダッシュボードのみに制限することで、これを改良することができます(したがって、オーバーヘッドを削減できます)。

//編集 :廃止予定の update_user_meta の代わりに update_usermeta を使うべきです。

//編集 、もう一度

フロントエンドでユーザーを追跡したい場合は、このコードを希望のテンプレートに入れてください。

if (is_user_logged_in()) {
    $user = wp_get_current_user();
    update_user_meta($user->ID, 'last_action_time', current_time('mysql'));
}

繰り返しになりますが、オーバーヘッドを減らすために、この not footer.phpファイルに入れることをお勧めします。私はむしろhome.php(あなたがそれを持っているなら)を取るか、または特定の要求をチェックしたい(例えばあなたのホームページ、つまりhome_url() == 'http://'.$_SERVER['SERVER_NAME'])。しかし、前述のように(意味:below;))、footer.phpで使用した場合のオーバーヘッドは、もちろん大丈夫です。

2
tfrommen