У меня есть пользовательский meta_key под названием «sales», в котором хранится информация обо всех продажах, совершенных сотрудником отдела продаж, а также флаг, указывающий, было ли оно авторизовано, ожидает авторизации или было отклонено.
WordPress сохраняет каждую продажу в виде отдельной строки в таблице пользовательских меток, и у меня нет проблем с тем, что я застрял в обновлении определенного статуса продаж; т.е. изменив его с ожидающего (2) на отклоненное (0) или утвержденное (1).
Я попробовал несколько способов сделать это, следуя советам на других форумах и т. Д., Но, похоже, я, во-первых, неправильно храню метаданные, поскольку все примеры забавны, что для каждого пользовательского meta_key для каждого пользователя существует только строка; поэтому посты предлагают обновить значение, удалить все данные, связанные с ключом, а затем загрузить измененный массив.
В настоящее время у меня есть следующий код, но он не работает, как я себе представлял, так как он сохраняет данные в другой массив, таким образом, становясь в дальнейшем вложенным.
if(isset($_POST['approved'])) {
$saleStatus = 2;
switch ($_POST['approved']) {
case 'approve':
$saleStatus = 1;
break;
case 'reject':
$saleStatus = 0;
break;
}
$sales = get_user_meta($_POST['repID'], 'sales');
foreach ($sales as $key => $sale) {
if($sale['reg'] === $_POST['carReg']) {
$sales[$key]['approved'] = $saleStatus;
}
}
update_user_meta( $_POST['repID'], 'sales', $sales);
}
ОБНОВЛЕНО
$sales = get_user_meta($_POST['repID'], 'sales');
foreach ($sales as $key => $sale) {
$old_sale_data = $sale;
if($sale['reg'] === $_POST['carReg']) {
$sale['approved'] = $saleStatus;
update_user_meta( $_POST['repID'], 'sales', $sale, $old_sale_data);
}
}
Вот полный ответ. Я обновил вопрос с правильным кодом. Мне пришлось поместить обновление в цикл, поскольку мои метаданные хранились в отдельных строках.
Других решений пока нет …