Wordpress:为用户创建一个新的 usermeta 字段

Posted

技术标签:

【中文标题】Wordpress:为用户创建一个新的 usermeta 字段【英文标题】:Wordpress: Create a new usermeta field for users 【发布时间】:2011-09-02 17:54:28 【问题描述】:

如何使用下拉选择值创建新的用户元字段?

我想为所有具有我想要的新自定义字段的特定值的用户创建一个条件语句。

例如,

新字段将是:已批准 下拉值是:是和否

条件语句将识别 Approved 字段值为 Yes 的所有用户。然后它会发布一个代码。

我正在使用 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!';

似乎没有插件,我真的需要这个功能。我非常感谢一些关于创建带有下拉选项的新用户元的建议。

*更新:

我使用 Register Plus Redux 创建了一个新的 usermeta 字段,称为“Artwork Approved”。我将其设为下拉选项,带有“否”和“是”选项。否选项设置为默认值。

这创建了“Artwork Approved”用户元字段。我管理用户帐户并选择是或否。现在有了这个新的 usermeta 字段,我正在使用一个函数来检查当前用户是否拥有值为 Yes 的 Artwork Approved。那么它应该显示某个代码。

这是我在新的 usermeta 字段中使用的 if 语句:

<?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 语句的第一部分。如果我登录任何已批准艺术品的帐户,即使我有艺术品批准的选项“是”,if 语句也只会显示“else”部分。

我不知道为什么它不能识别我在声明中的“是”选项。

谢谢

【问题讨论】:

【参考方案1】:

您可以创建一个简单的插件来挂钩用户配置文件操作并添加一个新字段。

要将字段添加到表单中,您可以挂钩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)) 

【讨论】:

谢谢理查德。我找到了一个可行的解决方案……我使用的是 Register Plus Redux 插件,它可以创建新的用户元。我已经用更多信息更新了我的帖子。我会很感激你的意见。非常感谢! 感谢 Richard,您的解决方案非常有效。我看到的唯一问题是,当我在管理部分中选中用户批准框时,更新页面后未选中该框。如果我们的一名员工查看该客户,他们将不知道他们是否获得批准。因此,如果我想取消选中(不批准)该框,我该怎么做?谢谢 我想我需要像您建议的那样将其创建为插件...我将您提供给我的第一个代码块添加到我的管理员成员 php 页面,在那里我上传照片以供批准。我添加到网站前端的第二个也是最后一个块,客户将在那里看到。查看我的数据库后,我找不到任何对“artwork_approved”的引用。我猜它没有被输入到数据库中,因为我没有正确注册。 @gdinari 我对Register Plus Redux 不熟悉,所以无法帮助您。至于我回答中的代码,第一个和第二个块都应该在插件中。完整的插件应该类似于gist.github.com/1000916。可以在需要检查artwork_approved 值的任何地方使用最终块(条件)。 谢谢一百万。我会试试这个!【参考方案2】:

不应该读取第二个代码块:

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'])

【讨论】:

好点,但我建议像这样清理数据:update_user_meta($user_id, 'artwork_approved', isset($_POST['artwork_approved']) ? 1 : 0 ); 因为它使用了复选框“artwork_approved”,如果未选中,它不会出现在 $_POST 数组中。

以上是关于Wordpress:为用户创建一个新的 usermeta 字段的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 创建自定义功能

为 Wordpress 中的每个新帖子自动创建一个新的 Mailchimp 邮件列表(M​​ailchimp API 3.0+)

mysql 8.0 创建新的数据库、用户并授权,以及相关查看并删除操作

在 wordpress 中为多个站点创建编辑器

mysql 8.0 创建新的数据库用户并授权,以及相关查看并删除操作

使用 WordPress 进行用户身份验证