2013-05-03 73 views
0

我想顯示的東西給我的WordPress的網站用戶,取決於他們已登錄的次數。我試圖用user_meta和wp_login鉤子完成此操作。add_user_meta和update_user_meta只能偶爾工作

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只能工作一小部分時間?

回答

1

第一次加載該元鍵將不存在,如果無法找到元鍵,返回false的函數不是空字符串,也不能增加false。不要使用empty(),因爲這會爲0返回true,但對於虛假的,而不是一個空字符串用來測試:

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; 
    } 
} 
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; 
    } 
} 

乾杯。

+0

不是bug,但一個錯誤,謝謝。 – Kin 2013-05-03 15:48:27