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不是空字符串,并且您不能递增false。不要使用empty(),因为这将返回 true for 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 回答