Возникла у меня необходимость добавить поле Предприятие, в профиль пользователя.
Для решения данного вопроса можно воспользоваться двумя вариантами.
Первый, это использовать стандартное решение, а именно использовать таблицу wp_usermeta, где хранится дополнительна мета информация про пользователя, например имя или фамилия. В таблице wp_usermeta, есть три основных поля: user_id, где указывается id пользователя, к которому относится мета поле; meta_key, здесь прописывается название мета поля и поле meta_value, здесь прописывается значения поля. Т.е, когда мы создадим дополнительное поле, то появится еще одна строка в таблице wp_usermeta, где будет прописано наше поле и его значение.
За создание и обновление мета полей отвечает соответствующая функция в WordPress, а именно update_usermeta().
Второй вариант, это добавить поле в таблицу, например таблицу с пользователями wp_users. Я опишу два варианта, отличие будет только в процессе записи данных, при обновлении профиля. А функция чтения будет одна, это стандартная функция получения мета данных пользователя: get_the_author_meta(). Дело в том, что функция get_the_author_meta() в начале читает таблицу wp_users, и ищет в этой таблице соответствующее поле, и если не находит, то ищет уже в wp_usermeta.
Все изменения и дополнения будем производить в файле functions.php нашей (вашей 🙂 ) темы. Для этого создадим функцию show_profile_fields () чтения данных из мета поля, таблицы wp_usermeta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function show_profile_fields($user) { ?> <table class="form-table"> <!-- добавляем поле названия предприятия --> <tr><th><label for="company">Предприятие</label></th> <td><input type="text" name="company" id="company" value='<?php echo esc_attr(get_the_author_meta('company',$user->ID)); ?>' class="regular-text" /><br /></td></tr> </table> <?php } add_action( 'show_user_profile', 'show_profile_fields' ); add_action( 'edit_user_profile', 'show_profile_fields' ); |
Этот код создаст дополнительное поле Предприятие, и если есть заполненное поле company у пользователя, то отобразит его в настройках изменения профиля пользователя.
Для того, чтобы сохранить введенные данные нашего созданного поля, создадим еще одну функцию в functions.php.
1 2 3 4 5 6 7 |
function save_profile_fields($user_id) { update_usermeta( $user_id, 'company', $_POST['company'] ); } add_action( 'personal_options_update', 'save_profile_fields' ); add_action( 'edit_user_profile_update', 'save_profile_fields' ); |
Функция save_profile_fields() срабатывает, когда вы нажимаете Обновить профиль. В этот момент, данные передаются методом POST, это – $_POST[‘company‘] значения которого перехватываются функцией save_profile_fields() , и сохраняются в wp_usermeta.
Если есть желание создать полноценное поле в таблице, то создавайте в wp_users, дополнительное поле, например с помощью phpMyAdmin, а далее изменим функцию сохранения save_profile_fields() , поменяем код.
1 2 3 4 5 6 7 8 |
function save_profile_fields($user_id) { global $wpdb; $comp=$_POST['company']; $zapros="update wp_users set company='$comp' WHERE id=$user_id"; $wpdb->query($wpdb->prepare($zapros,'%s')); } |
Дополнение
Если есть желание вывести столбец в общий список пользователей, то нужно добавить пару функций. В моем случае, как видно на рис., я добавил поле Предприятие.
1 2 3 4 5 6 7 8 9 10 11 12 |
function pippin_add_user_id_column($columns) { $columns['company'] = 'Предприятие'; return $columns; } add_filter('manage_users_columns', 'pippin_add_user_id_column'); function pippin_show_user_id_column_content($value, $column_name, $user_id) { return esc_attr(get_the_author_meta('company',$user_id));; } add_action('manage_users_custom_column', 'pippin_show_user_id_column_content', 10, 3); |