alexmirg
@alexmirg

В чем моя ошибка создания meta_value из множества массивов посредством update_user_meta?

Задача:
По клику submit выполнять update_user_meta ($user_id, 'list', $list_array);
Каждый новый submit это новый обьект, который добавляется в meta_key(Array).

Пример:
meta_key: 'list'
meta_value:
[
// submit1
1 {'key1': 'value1'},
// submit2
2 {'key2': 'value2'}
// submit3
3 {'key3': 'value4'}
....
]

Мой код:
function wdc_addclient() {
    $user_id = get_current_user_id();
    
    $list = $_POST['list'];
        
    if( isset($list) ) {
        update_user_meta( $user_id, 'list', $list);
    }
}

Каждый сабмит перезаписывает предыдущее значение.
ВОПРОС:
Как реализовать этот код чтобы он учитывал предыдущие значения и добавлял новое?
С тем учетом что я добавлю еще кнопку редактирование каждого из пунктов списка.
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
san_jorich
@san_jorich
Творческий кодер
Алексей, давайте разберем Ваш код:
$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);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы