У меня проблема здесь, ребята, и мне нужны ваши предложения. Дело в том, что я создал код для веб-сайта WordPress, в котором администратор может менять роли пользователя со страницы, а не с панели администратора. Теперь я создал код и застрял в одном месте, проблема в том, что после отправки данные должны быть изменены для каждого пользователя, который обновил выбранные роли. Но на данный момент он обрабатывает только последний в очереди. Таким образом, проблема заключается в том, что роль не обновляется для каждого отдельного пользователя и, кроме обновления каждого, код обрабатывает только последнего пользователя в очереди.
Справка по изображениям
var_dump
Результаты …
КОД:
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.";
}
}
Используйте синтаксис массива для входных имен.
input type="text" name="user_id[]" value="' . $user_id . '" readOnly="true">
<select name="userRole[]">
Ваш var_dump()
вызовы теперь должны выводить массив со всеми значениями. Затем переберите свои массивы с помощью цикла for и обновите каждого пользователя, содержащегося в массивах.
Массивы будут содержать всех пользователей. Если вы хотите обрабатывать только тех пользователей, у которых изменилась роль, вы должны либо проверить старую роль в цикле for, либо добавить код javascript, чтобы пометить определенные строки как обновленные.
Других решений пока нет …