Я пишу функцию, которая добавляет идентификационный номер в массив и помещает массив в usermeta. $_GET['auction']
это post_id
.
Ниже приведена функция:
$reminders = get_user_meta( $current_user->ID, "reminders" );
print_r( $reminders );
if( in_array( $_GET['auction'], $reminders ) ) {
echo "Failed: Auction already in list";
} else {
array_push( $reminders, intval( $_GET['auction'] ) );
if ( update_user_meta( $current_user->ID, "reminders", $reminders ) ) {
echo "Success";
} else {
echo "Failed: Could not update user meta";
}
}
print_r( $reminders );
Вот результат после добавления одного аукциона:
Array ( )
Success
Array ( [0] => 7 )
Вот результат после добавления двух аукционов:
Array ( [0] => Array ( [0] => 7 ) )
Success
Array ( [0] => Array ( [0] => 7 ) [1] => 73 )
А вот результат после добавления трех аукционов:
Array ( [0] => Array ( [0] => Array ( [0] => 7 ) [1] => 73 ) )
Success
Array ( [0] => Array ( [0] => Array ( [0] => 7 ) [1] => 73 ) [1] => 0 )
Обратите внимание, что добавление нового элемента в массив с помощью array_push
работает нормально. Но когда массив сохраняется в пользовательских метаданных, а затем снова извлекается, последний элемент массива помещается в собственный массив, создавая бесконечно размерный массив. Я бы предпочел сохранить этот массив одномерным.
Есть ли способ запустить update_user_meta
без get_user_meta
изменения структуры моего массива?
Не использовал эту функцию довольно долго, но я думаю, ваша проблема в том, что вы вставляете массив в массив. Итак, проверьте,
intval($_GET['auction'])
является ли массив:Изменить № 1: возможно, вам нужно получить значение из этого массива, а затем использовать его array_push. Так что, может быть, что-то вроде
array_push( $reminders, $_GET['auction'][0]) );
— если вы добавляете только одно значение. Вы также можете сделать что-то вроде$reminders[] = $_GET['auction'][0];
добавления его в конец массива.Редактировать № 2: Судя по основному файлу: да.
update_user_meta()
это просто псевдоним,update_metadata()
который берет идентификатор + значение и помещает его в базу данных как и массив.var_dump($_GET[‘аукцион’]) отображает: string(1) «7». Кажется, что update_user_meta автоматически сериализует данные. Может ли это быть причиной проблемы?
См. Правка №2… 🙂
Привет, @Jarred, у тебя это в итоге получилось? У меня есть аналогичная потребность для моего сайта. У меня есть параметры пользовательского мета-флажка (массив), которые мне нужно обновить для каждого пользователя (более 1500 пользователей). И мне нужен способ обновить каждого пользователя, давая им разные варианты выбора, но в массовом масштабе. Кажется, что наше решение может работать, но я не уверен, как реализовать выбор различных параметров для каждого отдельного пользователя. Я хотел бы работать с вашим примером, но мне нужна помощь в его настройке для моих нужд, которая заключалась бы в том, чтобы сделать уникальный выбор для каждого пользователя и обновления.
У меня такая же проблема. Добавление «true» к «get_user_meta» сработало для меня. Например:
ОТ:
К:
Имел ту же проблему и решил ее с помощью этого небольшого бита, который помещает все новые значения в один массив, сохраняемый как пользовательские метаданные:
Массив перед сохранением/обновлением для мета-ключа (из get_user_meta):
Результирующий массив (после метаобновления) с добавлением значения ‘access_5’:
Если вам нужно, чтобы новое значение было добавлено в конец массива, сделайте это вместо этого:
Затем обновите мета…
Брайан
Казалось, что проблема была с сериализацией/десериализацией массива, поэтому я просто переписал функцию, чтобы она представляла собой строку с запятыми:
Ответ Шона был правильным, но я чувствую, что нужно больше пояснений. Вы можете поместить массив в мета-запись пользователя, но когда вы его извлекаете, вам все равно нужно получить его с единственным аргументом, установленным в true, иначе вы получите массив массива обратно. Вот мой код: