Алексей, давайте разберем Ваш код:
$list = $_POST['list']; Присваиваем "листу" новое, пришедшее значение
f( isset($list) ) { update_user_meta( $user_id, 'list', $list); // и если оно есть, а оно уже есть - вы его присвоили. Даже пустое, но есть. Даже undifined.. вы его переписываетe.
Если лист - это массив, то перед сохранением Вам нужно добавить значение в массив. Таким образом получим:
array_push($list, $_POST['list']);
Добавим проверку на существование и "не пустоту":
if (isset($_POST['list']) || !empty($_POST['list'])) {
Ну.. и извлечем лист, к которому нужно добавить новое значение:
$list = get_user_meta($user_id, 'list', false/*ибо массив*/);
Итого получим что-то вроде:if (isset($_POST['list']) || !empty($_POST['list'])) {
$list = get_user_meta($user_id, 'list', false);
$new_list = array_push($list, $_POST['list']);
update_user_meta( $user_id, 'list', $new_list);
}