Создайте свои собственные поля контактов с пользователем WordPress
Сегодня я создал для вас новый плагин. Плагин, который касается способов связи пользователей. В принципе, когда редактируешь пользователя в администрации, там есть блок «контактная информация». Что ж, я хотел бы показать вам, как добавлять туда свои поля, и пойти немного дальше, как показывать (или нет) эти новые поля на странице регистрации.
Вот предварительный просмотр того, что мы собираемся создать:
И для этого, как обычно, мы создадим красивый и простой плагин!
Шаг 1: Создайте плагин
Создайте новую папку в wp-content/plugins и назовите ее «custom-user-contact-methods». Внутри этой вновь созданной папки создайте файл с именем «rc-custom-user-contact-methods.php» и откройте его в своем любимом редакторе.
Поместите это содержимое в свой пустой файл. Этот код просто регистрирует плагин:
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users "contact" section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
Шаг 2. Определите свои настраиваемые поля
Далее нам нужно создать переменную, которая будет содержать наши настраиваемые поля, которые будут использоваться на странице редактирования пользователя, а также на странице регистрации по умолчанию. Давайте сохраним эти поля в переменной $extra_fields.
$extra_fields = array(
array( 'facebook', __( 'Facebook Username', 'rc_cucm' ), true ),
array( 'twitter', __( 'Twitter Username', 'rc_cucm' ), true ),
array( 'googleplus', __( 'Google+ ID', 'rc_cucm' ), true ),
array( 'linkedin', __( 'Linked In ID', 'rc_cucm' ), false ),
array( 'pinterest', __( 'Pinterest Username', 'rc_cucm' ), false ),
array( 'wordpress', __( 'WordPress.org Username', 'rc_cucm' ), false ),
array( 'phone', __( 'Phone Number', 'rc_cucm' ), true )
);
Мы храним каждое поле в массиве, который имеет 3 параметра: первый — это идентификатор поля, второй — метка поля, а последний — логическая информация, которая определяет, отображается ли поле на странице регистрации или нет. . Вы можете добавить столько параметров, сколько захотите, например заполнитель или необходимую информацию.
Шаг 3: Подключите правильный фильтр
Теперь нам нужно подключить функцию к правильному фильтру. В нашем конкретном случае фильтр — «user_contactmethods», а имя функции, которую мы собираемся создать, — «rc_add_user_contactmethods».
// Use the user_contactmethods to add new fields
add_filter( 'user_contactmethods', 'rc_add_user_contactmethods' );
Шаг 4. Создайте настраиваемые поля
Теперь нам нужно создать функцию «rc_add_user_contactmethods». Именно он добавит наши настраиваемые поля на страницу редактирования пользователя. Хорошей новостью является то, что мы сохранили наши поля в массиве, а это означает, что следующая функция будет полностью динамической, и добавлять новые поля будет довольно легко, просто изменив переменную $extra_fields.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
На этом этапе, если вы сохраните и активируете плагин, вы должны увидеть свои настраиваемые поля на странице редактирования пользователя. Поскольку мы используем правильный хук, нам не нужно создавать данные полей «сохранения». Итак, на данный момент плагин работает отлично. Но я хотел бы пойти немного дальше и добавить возможность отображать эти поля на странице регистрации. Обязательно установите в настройках флажок «Любой может зарегистрироваться», иначе вы не сможете увидеть ссылку «Зарегистрироваться».
Шаг 5: Крючки на странице регистрации
Чтобы добавить наши поля на страницу регистрации, нам нужно получить доступ как минимум к двум хукам и создать две функции. Один для отображения полей, а второй для сохранения данных полей в базе данных.
Давайте подключим наши функции:
// Add our fields to the registration process
add_action( 'register_form', 'rc_register_form_display_extra_fields' );
add_action( 'user_register', 'rc_user_register_save_extra_fields', 100 );
Шаг 6. Отображение страницы регистрации настраиваемых полей
В приведенном выше коде мы объявили две функции. Первый — отображение полей на странице регистрации. В этой части нам нужно позаботиться о третьем параметре каждого массива в $extra_fields. Этот логический параметр указывает, должны ли поля отображаться или нет. True: поле отображается, false: поле не отображается.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to "true"
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : '';
echo '<p>
<label for="'. esc_attr( $field[0] ) .'">'. esc_html( $field[1] ) .'<br />
<input type="text" name="'. esc_attr( $field[0] ) .'" id="'. esc_attr( $field[0] ) .'" class="input" value="'. esc_attr( $field_value ) .'" size="20" /></label>
</label>
</p>';
} // endif
} // end foreach
}
Шаг 7. Сохраните значения полей после регистрации
Теперь, когда наши поля отображаются на странице регистрации, нам нужно сохранить их значения в базе данных. Это цель функции «rc_user_register_save_extra_fields». Для этого нам нужно использовать функцию «wp_update_user()».
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = '', $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata['ID'] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
Заключение
Что ж, мы увидели основы того, как добавлять новые поля в методы контакта с пользователем, но это все. Например, вы можете удалить существующие поля, такие как «Yahoo IM», «AIM» и «Jabber», выполнив простую функцию unset(). Но вы также можете добавить некоторые функции для очистки ваших настраиваемых полей, чтобы, например, проверить, имеет ли номер телефона соответствующий формат, является ли поле обязательным или нет и т. д. и т. п. Не стесняйтесь спрашивать о конкретных функциях в комментариях!
Да, и последнее… если вы хотите отобразить данные любого вашего поля, просто используйте это:
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, 'twitter', true );