В предыдущей статье я объяснил, как можно изменить контактную информацию на странице профиля пользователя 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);
}
}
Вот и все, теперь вы можете создавать настраиваемые поля формы и сохранять их в соответствии с пользовательской мета-областью для использования в других местах вашего сайта.