1

ログイン回数に応じて、wordpress サイトのユーザーに何かを表示しようとしています。user_meta と wp_login フックを使用してこれを達成しようとしました。

add_action( 'wp_login', 'survey_login' );
function survey_login() {
    global $current_user;
    get_currentuserinfo();
    $login_count = get_user_meta($current_user->ID, 'login_count', true);

    if($login_count == "") { $login_count = 0; }

    update_user_meta($current_user->ID, "login_count", $login_count++ );

    if($login_count >= 5) {
        $_SESSION['csm_survey_login'] = true;
    }
}

これは機能するはずですが、何らかの理由で user_meta キーが追加/更新されるのは約 1/20 の時間だけです。どのように、またはなぜというパターンを見つけることができませんでした。

関数を単純化して単純化しようとしました

add_user_meta($current_user->ID, 'login_count', 1);

または

update_user_meta($current_user->ID, 'login_count', 1);

どちらも同じ問題を抱えています。

なぜ update_user_meta または wp_login がごくわずかな時間しか機能しないのか、誰でも知っていますか?

4

2 に答える 2

2

問題はインクリメントにあります。$login_count++の現在の値を返し、$login_countインクリメントします。++$login_countインクリメントされた値を返すものが必要です。

add_action( 'wp_login', 'survey_login' );
function survey_login() {
    global $current_user;
    get_currentuserinfo();
    $login_count = get_user_meta($current_user->ID, 'login_count', true);

    if($login_count == "") { $login_count = 0; }

    update_user_meta($current_user->ID, "login_count", ++$login_count );

    if($login_count >= 5) {
        $_SESSION['csm_survey_login'] = true;
    }
}

乾杯。

于 2013-05-03T15:45:52.263 に答える
2

これが最初にロードされたとき、メタ キーは存在しません。メタ キーが見つからない場合false、空の文字列を返す関数はなく、インクリメントすることはできませんfalseempty()これは に対して true を返すため使用しないでください0。ただし、空の文字列の代わりに false をテストするには、次を使用します。

add_action( 'wp_login', 'survey_login' );
function survey_login() {
    global $current_user;
    get_currentuserinfo();

    // Get meta key, returns false if it doesn't exist
    $login_count = get_user_meta( $current_user->ID, 'login_count', true );

    // Test for false and set to default
    if ( false === $login_count ){
        $login_count = 0;
    }

    // Increment and update
    update_user_meta( $current_user->ID, "login_count", ++$login_count );

    if( $login_count >= 5 ) {
        $_SESSION['csm_survey_login'] = true;
    }
}
于 2013-05-05T10:54:24.880 に答える