В предыдущей статье я объяснил, как можно изменить контактную информацию на странице профиля пользователя WordPress , но что делать, если вы хотите узнать больше пользовательской информации от пользователя, которая требует больше, чем просто текстовое поле.
В этом уроке мы рассмотрим, как мы можем добавлять новые поля на страницу профиля пользователя, чтобы собирать пользовательскую информацию, которая требует раскрывающегося списка или флажка.
В этом уроке нам нужно использовать 4 действия WordPress:
- show_user_profile — используется на странице «Ваш профиль».
- edit_user_profile — используется на странице «Редактирование пользователя».
- personal_options_update — запускается при загрузке страницы страницы «Ваш профиль», используется для обработки отправки формы.
- edit_user_profile_update — запускается при загрузке страницы страницы «Редактировать пользователя», используется для обработки отправки формы.
В этом руководстве мы собираемся использовать ООП и создать класс PHP, который будет обрабатывать эту настройку. При работе с ООП с WordPress рекомендуется размещать функции add_action () или add_filter () в конструкторе класса.
class Add_New_User_Profile_Fields { public function __construct() { // add actions for the profile customisation add_action( 'personal_options_update', array($this, 'update_custom_profile_fields') ); add_action( 'edit_user_profile_update', array($this, 'update_custom_profile_fields') ); add_action('show_user_profile', array($this, 'add_custom_profile_fields')); add_action('edit_user_profile', array($this, 'add_custom_profile_fields')); } /** * Add new custom fields to the profile page * * @param $profileuser */ public function add_custom_profile_fields( $profileuser ) { // add new custom profile fields } /** * Update new fields on the user profile page * * @param $user_id */ public function update_custom_profile( $user_id ) { // code to validate and update the user data } }
Чтобы использовать это на своем сайте, вы можете либо превратить его в плагин, либо включить файл из вашей темы functions.php и создать экземпляр класса.
Добавить новые поля на страницу профиля
Чтобы добавить новые поля на страницы профиля, нам нужно использовать действия show_user_profile и edit_user_profile, которые будут запускать одну и ту же функцию add_custom_profile_fields . Отсюда мы можем просто добавить любой HTML-код, который хотим создать, в новые поля формы.
/** * Add new custom fields to the profile page * * @param $profileuser */ public function add_custom_profile_fields( $profileuser ) { $customData = get_user_meta( $profileuser->ID, 'custom_user_fields', true ); ?> <h2><?php _e('Custom User Profile Fields'); ?></h2> <table class="form-table"> <tr> <th><label for="custom_user_fields_textbox"><?php _e('Custom Textbox'); ?></label></th> <td><input type="text" name="custom_user_fields_textbox" id="custom_textbox" value="<?php echo if(isset($customData['textbox'])){ echo esc_attr($customData['textbox']); } ?>" class="regular-text" /></td> </tr> <tr> <th><label for="custom_user_fields_select"><?php _e('Custom Select'); ?></label></th> <td> <select name="custom_user_fields_select" id="custom_select"> <option value="">Please Select</option> <option value="1" <?php if(isset($customData['select'])){ selected($customData['select'], 1); } ?>>Select Value 1</option> <option value="2" <?php if(isset($customData['select'])){ selected($customData['select'], 2); } ?>>Select Value 2</option> <option value="3" <?php if(isset($customData['select'])){ selected($customData['select'], 3); } ?>>Select Value 3</option> <option value="4" <?php if(isset($customData['select'])){ selected($customData['select'], 4); } ?>>Select Value 4</option> <option value="5" <?php if(isset($customData['select'])){ selected($customData['select'], 5); } ?>>Select Value 5</option> </select> </td> </tr> <tr> <th><label for="custom_user_fields_checkbox"><?php _e('Custom Checkbox'); ?></label></th> <td><input type="checkbox" name="custom_user_fields_checkbox" id="custom_checkbox" value="1" <?php if(isset($customData['checkbox'])){ checked($customData['checkbox'], 1); } ?>/></td> </tr> </table> <?php }
Сначала мы начнем с получения текущих значений в базе данных для пользователя. Как и сообщения, WordPress позволяет хранить дополнительную информацию для пользователей приложения, это называется мета пользователя . Когда мы сохраняем данные, нам нужно сохранить их в метаинформации пользователя. Поэтому мы собираемся использовать функцию get_user_meta () для получения пользовательских полей, которые мы создаем. Это вернет массив данных настраиваемого поля из базы данных, мы будем использовать эти данные для заполнения формы.
Далее в этом коде мы просто создаем поля формы в HTML всей необходимой нам информации.
С этим кодом в вашем классе вы сможете перейти на страницу профиля и увидеть новые поля в нижней части страницы профиля.
Сохранить поля профиля
Теперь, когда поля отображаются на странице профиля пользователя, нам нужно обработать эту информацию и сохранить ее в метаинформации пользователя.
На кнопке сохранения на странице профиля она отправляет форму обратно в себя и обрабатывает значения, поэтому мы можем подключиться к действиям personal_options_update и edit_user_profile_update для обработки новых полей пользователя.
Приведенный ниже код проверит, было ли опубликовано поле формы, затем очистит входные данные и сохранит значение в массиве. После обработки всех полей в этом массиве мы можем взять эту переменную и сохранить ее в пользовательской мета- функции с помощью функции update_user_meta () .
/** * Update new fields on the user profile page * * @param $user_id */ public function update_custom_profile( $user_id ) { $userData = array(); if(!empty( $_POST['custom_user_fields_textbox'] )) { $userData['textbox'] = sanitize_text_field( $_POST['custom_user_fields_textbox'] ); } if(!empty( $_POST['custom_user_fields_select'] )) { $userData['select'] = sanitize_text_field( $_POST['custom_user_fields_select'] ); } if(!empty( $_POST['custom_user_fields_checkbox'] )) { $userData['checkbox'] = intval( $_POST['custom_user_fields_checkbox'] ); } if(!empty($userData)) { update_user_meta( $user_id, 'custom_user_fields', $userData); } }
Вот и все, теперь вы можете создавать настраиваемые поля формы и сохранять их в соответствии с пользовательской мета-областью для использования в других местах вашего сайта.