Сохранение пользовательских данных для каждого пользователя

11 февр. 2011 г., 11:16:55
Просмотры: 14.3K
Голосов: 7

Я позволяю пользователям сохранять заметки на моем сайте WordPress. Они могут делать это только после входа на сайт.

Теперь я хочу сохранять их заметки в таблице базы данных и привязывать их к ID пользователя. То есть, если пользователь сохранил 2 заметки, то после входа на страницу "Моя страница" он должен видеть эти 2 сохраненные заметки.

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

Спасибо.

0
Все ответы на вопрос 1
4

Посмотрите на функцию update_user_meta. С её помощью можно сохранять данные пользователя, будь он регистрируется или уже авторизован — всё зависит от того, какой ID пользователя вы передадите.

Например, в вашей функции для сохранения данных пользователя после входа в систему:

function save_user_data_7231(){
    global $current_user;
    if is_user_logged_in{ //проверяем, авторизован ли пользователь
        if (isset($_POST['Notes'])){
            // получаем текущие данные пользователя
            get_currentuserinfo();
            $old_notes = get_user_meta($current_user->ID, 'user_notes', true);
            if (isset($old_notes)&& is_array($old_notes)){
                //если уже сохраняли несколько заметок
                $old_notes[] = $_POST['Notes'];
                update_user_meta( $current_user->ID, 'user_notes', $old_notes);
            }
            if (isset($old_notes)&& !is_array($old_notes)){
                //если сохраняли только одну заметку ранее
                $new_notes = array($old_notes,$_POST['Notes']);
                update_user_meta( $current_user->ID, 'user_notes', $new_notes)
            }
            if (!isset($old_notes)){
                //первая заметка для этого пользователя
                update_user_meta( $current_user->ID, 'user_notes', $_POST['Notes'])
            }
        }
    } 
}

Чтобы отобразить заметки пользователя, можно использовать get_user_meta:

function get_user_notes_654(){
    global $current_user;
    if is_user_logged_in{ //проверяем, авторизован ли пользователь
        // получаем текущие данные пользователя
        get_currentuserinfo();
        $old_notes = get_user_meta($current_user->ID, 'user_notes', true);
        if (!isset($old_notes)){
            $re = 'Заметок пока нет!';
        }
        if (isset($old_notes)){//есть заметки. Убрали лишний ! здесь.
            if (is_array($old_notes)){//больше одной
                foreach($old_notes as $note){
                    $re .= '<strong>заметка:</strong>' . $note . '<br />'; 
                }
            }else{//только одна
                $re = '<strong>заметка:</strong>' . $old_notes . '<br />';
            }
        }
        re .='//здесь могла бы быть форма добавления заметки';
        return $re;
    }
}

Надеюсь, это поможет.

11 февр. 2011 г. 11:55:50
Комментарии

спасибо. что если я хочу сохранить данные, отличные от строки - например, файлы?

lostInTransit lostInTransit
11 февр. 2011 г. 12:00:17

сохранение файлов будет означать обработку загрузки и сохранение ID вложения, который можно сохранить как строку. также, если вы просто сохраните URL файла после загрузки, это всё равно будет строка.

Bainternet Bainternet
11 февр. 2011 г. 12:02:52

@Bainternet я знаю, что эта тема старая, но она мне помогает. Просто один вопрос: я не устанавливал заметку, но $old_notes = get_user_meta($current_user->ID, 'user_notes', true); echo 'old notes ' . isset($old_notes); возвращает 1, а должно быть 0/false, верно?

alex alex
10 сент. 2014 г. 11:24:02

Хорошо, я немного изменил ваш код, if (!isset($old_notes[0])) { похоже, работает как я ожидал. $old_notes всегда содержит массив в качестве значения?

alex alex
10 сент. 2014 г. 18:36:38