2011-05-26 58 views
6

如何用下拉選擇值創建一個新的usermeta字段?WordPress的:爲用戶創建一個新的usermeta字段

我想創建一個條件語句爲所有用戶與我想要的新的自定義字段的特定值。

例如,

新的領域將是:批准 下降值的下降是:Yes和No

條件語句會認識到所有用戶是經批准的字段值。然後它會發布代碼。

我正在使用wp_get_current_user函數(),它正是我所需要的,但我只需要一個新的自定義usermeta字段。在這個例子中,新的usermeta字段將是「artwork_approved」。

例子:

wp_get_current_user(); 
if ($current_user->artwork_approved == 'Yes'){ 
    echo 'Thank you for approving your artwork!'; 
} 

人們似乎對此沒有插件,我真的需要此功能。我真的很感激用下拉選項創建一個新的usermeta的建議。

* UPDATE:

我用寄存器加上終極版創建一個新的usermeta領域,被稱爲 「藝術品已批准」。我做了一個下拉選項,選項「否」和「是」。 「否」選項設置爲默認值。

這創建了「Artwork Approved」usermeta字段。我管理用戶帳戶並選擇「是」或「否」。現在,使用這個新的usermeta字段,使用應檢查當前用戶是否具有值爲「是」的作品批准的功能。然後它應該顯示一個特定的代碼。

<?php global $current_user; get_currentuserinfo(); if ($current_user->artwork_approved == 'Yes') { ?> 

echo 'Your artwork is approved'; 

<?php } else { ?>   

echo 'Your artwork is not approved'; 

<?php } ?> 

但是發生了什麼是它不承認if語句的第一部分:

如果新usermeta領域使用的語句我在這裏是。如果我登錄到任何經過藝術作品批准的帳戶,if語句僅顯示「其他」部分,即使我爲藝術品批准選項選擇了「是」。

我不知道爲什麼它沒有在聲明中識別Yes Option。

感謝

回答

16

您可以創建一個簡單的插件掛接到用戶配置文件動作,並添加一個新的領域。

要將字段添加到表單中,您可以將其綁定到show_user_profileedit_user_profile操作並輸出表單字段HTML。下面使用複選框而不是下拉菜單。

add_action('show_user_profile', 'my_user_profile_edit_action'); 
add_action('edit_user_profile', 'my_user_profile_edit_action'); 
function my_user_profile_edit_action($user) { 
    $checked = (isset($user->artwork_approved) && $user->artwork_approved) ? ' checked="checked"' : ''; 
?> 
    <h3>Other</h3> 
    <label for="artwork_approved"> 
    <input name="artwork_approved" type="checkbox" id="artwork_approved" value="1"<?php echo $checked; ?>> 
    Artwork approved 
    </label> 
<?php 
} 

然後,你需要掛接到personal_options_updateedit_user_profile_update行動,讓您的字段的值,這爲節省用戶的元數據。

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', isset($_POST['artwork_approved'])); 
} 

您的情況將如下。

if (get_user_meta($current_user->ID, 'artwork_approved', true)) { 
+0

謝謝理查德。我發現一個有點工作的解決方案...我使用Register Plus Redux插件,它可以創建新的用戶。我已更新我的帖子,提供更多信息。我很感謝你的意見。非常感謝! – gdinari 2011-05-27 13:38:26

+0

感謝理查德您的解決方案像一個魅力工作。我看到的唯一問題是,當我在管理部分檢查用戶批准框時,在更新頁面後,框不會被選中。如果我們的一位員工查看該客戶,他們不知道他們是否被批准。因此,如果我想取消選中(取消批准)框,我該怎麼做?謝謝 – gdinari 2011-05-31 16:12:05

+0

我想我需要將它創建爲一個像你所建議的插件......我將第一塊代碼添加到了我的管理員成員php頁面,在那裏我上傳了照片以供審批。我添加到網站前端到客戶端將看到的前端的第二個也是最後一個。在查看我的數據庫後,我找不到任何對「artwork_approved」的引用。我猜它沒有得到輸入數據庫,因爲我沒有註冊正確。 – gdinari 2011-05-31 16:21:29

1

不應代碼的第二塊讀:

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', $_POST['artwork_approved']); 
} 

通過update_user_meta保存的值是不$_POST['artwork_approved']isset($_POST['artwork_approved'])

+0

好點,雖然我會建議清理數據,例如:'update_user_meta($ user_id,'artwork_approved',isset($ _ POST ['artwork_approved'])?1:0);' – helgatheviking 2012-12-17 05:25:11

+1

因爲它使用複選框'artwork_approved'如果未選中,它將不會出現在$ _POST數組中。 – 2012-12-18 10:41:57

相關問題