提交不同行的结果

Submit results for different rows

伙计们,我有一个问题,我需要你们的建议。问题是我为一个 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 代码以将某些行标记为已更新