Как исправить «Добавление элемента в массив вместо его замены»? - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь написать функцию, в которой вошедшие в систему пользователи могут добавлять избранные свойства и сохранять их в виде массива в пользовательской мета-таблице, но вместо добавления нескольких значений он просто сохраняет одно значение и продолжает его заменять.Что я здесь не так делаю?Мне также не удалось добавить его вручную в базу данных, как прочитать структуру?

Это для WordPress

function wms_add_to_usermeta( $post_id )
{
    $favorites   = $this->wms_get_user_meta();
    $favorites[] = $post_id;
    $this->wms_update_user_meta( $favorites );

    return true;
}

WMS GET USER META Функция

function wms_get_user_meta( $user = "" )
    {

        if( ! empty( $user ) ) {

            $userdata = $this->get_user_by( 'login', $user );
            $user_id  = $userdata->ID;

            return get_user_meta( $user_id, $this->favorites_meta_key, true );
        }
        else {

            return get_user_meta( $this->wms_get_user_id(), $this>favorites_meta_key, true );
        }
    }

Обновление метаинформации пользователя

function wms_update_user_meta( $arr )
    {
        return update_user_meta( $this->wms_get_user_id(), $this->favorites_meta_key, $arr );
    }

структура данных таблицы a: 1: {i: 0; i: 7;} она продолжает заменять i: 7;7 - это $ post_id

1 Ответ

0 голосов
/ 28 сентября 2019

Вы определяете $ favours, когда вызываете mws_get_user_meta в своем классе.Затем вы повторно объявляете $ Favorites как массив, когда добавляете скобки после него, но это игнорируется, потому что это уже массив, или, как Алекс предполагает, что ваш массив может потерять свой формат, когда вы это сделаете.Затем с помощью = вы нажимаете post_id, чтобы он оказался в конце массива.

Итак, вы получите:

$this->wms_update_user_meta( array('stuff returned from wms_get_user_meta, $post_id);

Это объясняет, почему ваша 7 всегда находится в конце ваших данных.

Я бы взглянул на функцию mws_get_user_meta и убедился, что вы отправляете правильные аргументы.Ядро требует 3 аргумента, и я подозреваю, что функция вашего класса делает то же самое.Вот базовая функция :

function update_user_meta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
    return update_metadata( 'user', $user_id, $meta_key, $meta_value, $prev_value );
}

Обратите внимание, что $ user_id, $ meta_key, $ meta_value - все они обязательны или возвращают значение false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...