如何使用下拉选择值创建新的用户元字段?
我想为所有用户创建一个条件语句,其中包含我想要的新自定义字段的特定值。
例如,
新字段将是:已批准 下拉值是:是和否
条件语句将识别所有 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 创建了一个新的用户元字段,称为“Artwork Approved”。我将其设为下拉选项,选项为“否”和"is"。否选项设置为默认值。
这创建了“Artwork Approved”用户元字段。我管理用户帐户并选择是或否。现在有了这个新的 usermeta 字段,我正在使用一个函数来检查当前用户是否拥有值为 Yes 的 Artwork Approved。然后它应该显示特定代码。
这是我在新用户元字段中使用的 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”部分,即使我为“艺术品已获批准”选择"is"也是如此。
我不知道为什么它不能识别我在声明中使用的"is"选项。
谢谢
最佳答案
您可以创建一个简单的插件来挂接到用户配置文件操作并添加一个新字段。
要将字段添加到表单,您可以挂接到 show_user_profile
和 edit_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_update
和 edit_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)) {
关于php - Wordpress:为用户创建一个新的 usermeta 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6141502/