web-dev-qa-db-ja.com

1人のユーザーを1年間ログインしたままにしますか?

これを簡単にする必要があります。1人のユーザー(my-user)を1年間ログインさせ続けるにはどうすればよいですか? (私はdevツールコンソールでログインクッキーをチェックしています)。

更新8/16/15

これは動作します:

add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year', 10, 3 );

function keep_me_logged_in_for_1_year( $ttl, $user_id, $remember ) {
    if( 1 === $user_id )
        $ttl = YEAR_IN_SECONDS;
   return $ttl;
}

そしてarrayオプションを使うと、これは複数のユーザに有効です。

add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year', 10, 3 );

function keep_me_logged_in_for_1_year( $ttl, $user_id, $remember ) {
    if( in_array( $user_id, array( 1, 2 ) ) )
        $ttl = YEAR_IN_SECONDS;
   return $ttl;
}

Update 8/12/15:Re:以下のRarst's answer:get_currentuserinfoはプラガブルなので、この中でapply_filtersをどう使うかコンテキスト?

下記のこの関数が単純なプラグインで使用されていると、Call to undefined function get_currentuserinfo()エラーが発生します。

global $user_login;
   get_currentuserinfo();
   if ($user_login == "my-user") {

function keep_me_logged_in_for_1_year( $expirein ) {
   return 31556926; // 1 year in seconds
}
add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year' );

}

しかし、Codexの使用法はglobalを使用します。 https://codex.wordpress.org/Function_Reference/get_currentuserinfo

これは、もちろん、1年間すべてのユーザーをログインさせたままにします。

function keep_me_logged_in_for_1_year( $expirein ) {
   return 31556926; // 1 year in seconds
}
add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year' );
4
markratledge

get_currentuserinfo()はプラグイン可能な関数です。プラグインのロード段階では利用できません。

それ以外は、条件付きでフィルタを追加するのではなく、フィルタによって提供されたデータを使用します。フィルタ呼び出しを見てみましょう。

apply_filters( 'auth_cookie_expiration', 14 * DAY_IN_SECONDS, $user_id, $remember )

$user_idは2番目の引数として提供されています。あなたは単にあなたのフィルタにそれをリッスンさせ、それに条件付きでreturnを修正させるだけです。

これはテストされていない例です。

add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year', 10, 3 );

function keep_me_logged_in_for_1_year( $ttl, $user_id, $remember ) {
    if( 123 === $user_id )
        $ttl = YEAR_IN_SECONDS;
   return $ttl;
}
4
Rarst