我对代码进行了一些编辑,这可以在我的localhost上运行。试试看,如果可以的话告诉我。
Be careful to edit your own admin role though. 或者设置其他条件,以防止在出现使用错误时更新管理员角色。
Edit: added ob_start() 感谢马克·卡普伦。短代码需要返回而不是回显。
add_shortcode( \'upgrade_to_premium\', \'upgrade_to_premium\' );
function upgrade_to_premium() {
// Stop if user is not logged in.
if ( ! is_user_logged_in() )
return;
ob_start();
?>
<form method="post" action="">
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
// Do not process anything if it\'s not $_POST
if ( ! isset( $_POST[\'role\'] ) )
return;
// Never trust user input.
$role = sanitize_key( $_POST[\'role\'] );
if ( ! in_array( $role, array( \'subscriber\', \'premium\' ) ) )
return;
// Get the user object
$user = new WP_User( get_current_user_id() );
$index = key( $user->roles );
$user_role = $user->roles[ $index ];
// User already got that user
if ( $user_role == $role ) {
echo sprintf( __( \'You already have %s role.\' ), $role );
} else {
// update user role
$user->set_role( $role );
echo sprintf( __( \'Your role was changed to %s.\' ), $role );
}
$output = ob_get_contents();
ob_end_clean();
return $output;
}