2011-05-26 55 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

相关问题