我在这里遇到问题,我需要你的建议。问题是我为wordpress网站创建了一个代码,管理员可以从一个页面而不是管理员仪表板中更改用户的角色。现在我已经创建了代码并且我被困在一个地方,问题是在提交时,应该为已更新所选角色的每个用户更改数据。但目前它只处理最后一个。 因此问题是,每个不同的用户都没有更新角色,除了更新每个代码之外,还只处理最后一个用户。
图片帮助
var_dump
结果......
CODE:
function custom_get_users() {
require_once('wp-admin/includes/template.php');
require_once('wp-includes/registration.php');
if ( !function_exists('get_editable_roles') ) {
require_once( ABSPATH . '/wp-admin/includes/user.php' );
}
global $current_user;
global $wp_roles;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
if ( is_user_logged_in() && $user_role == 'administrator' ) {
$args = array(
'orderby' => 'ID',
'order' => 'ASC',
);
$blogusers = get_users( $args );
if ( isset( $_POST['submit'] ) ) {
$user_id = $_POST['user_id'];
$new_role = $_POST['userRole'];
var_dump($user_id);
var_dump($new_role);
// update user role using wordpress function
wp_update_user( array ('ID' => $user_id, 'role' => $new_role ) ) ;
}
echo "<form method='post' action='#'>";
echo "<table class='widefat'>";
echo "<thead>";
echo "<tr class='thead'>";
echo "<th>User ID</th>";
echo "<th>User Name</th>";
echo "<th>Role</th>";
echo "</tr>";
echo "</thead>";
// Array of WP_User objects.
foreach ( $blogusers as $user ) {
$user_id = $user->ID;
$user_role = $user->roles;
echo '<tr>';
echo '<td><input type="text" name="user_id" value="' . $user_id . '" readOnly="true"></td>';
echo '<td>' . esc_html( $user->display_name ) . '</td>';
echo '<td><select name="userRole">';
wp_dropdown_roles( $user_role[0] );
echo '</select></td>';
echo '</tr>';
}
echo '</table>';
echo '<input type="submit" name="submit" id="submit" class="button button-primary" value="Save">';
echo '</form>';
} else {
echo "Only Administrator can see this page.";
}
}
答案 0 :(得分:2)
对输入名称使用数组语法。
input type="text" name="user_id[]" value="' . $user_id . '" readOnly="true">
<select name="userRole[]">
您的var_dump()
调用现在应该输出包含所有值的数组。然后使用for循环遍历数组并更新数组中包含的每个用户。
数组将包含所有用户。如果您只想处理角色更改的用户,您必须检查for循环中的旧角色,或者您必须添加一些javascript代码以将某些行标记为已更新