我有一个具有不同用户角色的博客,因此具有不同的用户权限级别。
有时,我想让我的注册用户免费升级他们当前的用户角色(“em>订阅者”到“premiummber”),但我不想让每个想要手动升级的用户都这样做。
我认为有一个小插件(通过短代码运行)会很好([upgrade_user_role]
+ [request_user_role]
) 这样,我的用户只需单击一个按钮即可升级其用户角色,而且还可以请求当前的用户角色状态。
我不知道怎么写这个。但至少我可以试着向你解释插件应该如何工作。
首先,它应该检查用户是否已经登录,如果已经登录,它应该用按钮布局加载CSS文件用户登录后,只需单击其中一个按钮,即可升级或请求其当前用户角色我真的试着自己编写代码,但我无法让它正常工作。
对于登录检查,我尝试使用is_user_logged_in()
函数与简单的if查询结合使用。对于更新和请求角色功能,我尝试使用:
$current_user = wp_get_current_user();
以及
$current_user_id = $current_user->ID;
结合
update_metadata(\'user\', $current_user_id, \'role\', \'$current_role)
Edit:我试图用下面的代码编写一个小插件,但在使用安装程序时无法获得显示的表单
[show_upgrade_to_premium]
在帖子或站点中。
function upgrade_to_premium() {
if(is_user_logged_in()) {
if(is_page(\'upgrade-to-premium\')) {
global $load_css;
$load_css = true;
$output = upgrade_to_premium_form();
$current_user = wp_get_current_user();
if( $current_user->roles[0] == "subscriber" || $current_user->roles[0] == "premium" ) {
$user_id = $current_user->id;
$role = $current_user->roles[0];
if( $_POST[\'role\']){
if( $_POST[\'role\'] == $role ) {
echo "Sorry, you are already " . $role . "!";
} else {
$role = $_POST[\'role\'];
$userdata = array();
$userdata[\'ID\'] = $user_id;
$userdata[\'role\'] = $role;
wp_update_user($userdata);
echo "Your user type has been changed! You are now " . $role . "!";
}
}
}
}
}
else {
}
return $output;
}
add_shortcode(\'show_upgrade_to_premium\', \'upgrade_to_premium\');
function upgrade_to_premium_form() {
ob_start(); ?>
<h3 class="header"><?php _e(\'Upgrade to premium\'); ?></h3>
<form id="upgrade_to_premium_form" class="form" action="" method="POST">
Please select a role:<br/>
<select name="role">
<option value="subscriber" selected="selected">Subscriber</option>
<option value="premium">Premium</option>
</select>
<input TYPE="submit" name="submit" />
</form>
<?php
return ob_get_clean();
}
function register_css() {
wp_register_style(\'form-css\', plugin_dir_url( __FILE__ ) . \'/css/forms.css\');
}
add_action(\'init\', \'register_css\');
function print_css() {
global $load_css;
if ( ! $load_css )
return;
wp_print_styles(\'form-css\');
}
add_action(\'wp_footer\', \'print_css\');