Хук user_contactmethods
позволяет изменять контактные данные пользователей на их профиле. С его помощью можно добавить новые способы связи или удалить ненужные поля.
apply_filters( ‘user_contactmethods’, string[] $methods, WP_User|null $user )
Этот фильтр используется для настройки контактной информации, отображаемой на странице профиля пользователя. Вы можете добавлять новые контактные методы, изменять существующие или удалять ненужные поля.
Использование
Для использования user_contactmethods
добавьте следующий код:
add_filter('user_contactmethods', 'custom_user_contactmethods_filter', 10, 2);
/**
* Пример использования фильтра `user_contactmethods`.
*
* @param string[] $methods Массив доступных контактов.
* @param WP_User|null $user Объект пользователя.
*
* @return string[]
*/
function custom_user_contactmethods_filter($methods, $user) {
// Ваша логика
return $methods;
}
Пример 1: Добавление полей Instagram и Telegram, удаление Yahoo и Jabber
Этот пример добавляет в профиль пользователя поля для Instagram и Telegram, а также удаляет устаревшие контакты, такие как Yahoo и Jabber.
add_filter('user_contactmethods', 'modify_user_contact_fields', 10, 2);
function modify_user_contact_fields($methods, $user) {
// Добавляем новые контактные методы
$methods['instagram'] = __('Instagram');
$methods['telegram'] = __('Telegram');
// Удаляем устаревшие контактные методы
unset($methods['yahoo']);
unset($methods['jabber']);
return $methods;
}
В результате на странице профиля появятся новые поля, где пользователи смогут указать свои данные для Instagram и Telegram, а устаревшие методы исчезнут.
Пример 2: Добавление контактного метода для корпоративного мессенджера только для пользователей с ролью «Editor»
В этом примере мы добавим контактный метод для корпоративного мессенджера, но только для пользователей с ролью «Редактор» (Editor
).
add_filter('user_contactmethods', 'add_corporate_messenger_field', 10, 2);
function add_corporate_messenger_field($methods, $user) {
// Проверка роли пользователя
if ($user && in_array('editor', $user->roles)) {
$methods['corp_messenger'] = __('Corporate Messenger');
}
return $methods;
}
Теперь только пользователи с ролью «Редактор» увидят поле для корпоративного мессенджера на странице своего профиля.
Пример 3: Использование объектно-ориентированного подхода для добавления полей LinkedIn и GitHub
В этом примере создается класс, добавляющий контактные поля LinkedIn и GitHub для всех пользователей, используя объектно-ориентированный подход.
class CustomUserContactMethods {
public function __construct() {
add_filter('user_contactmethods', [$this, 'add_social_links']);
}
public function add_social_links($methods) {
$methods['linkedin'] = __('LinkedIn');
$methods['github'] = __('GitHub');
return $methods;
}
}
// Инициализация класса
new CustomUserContactMethods();
Теперь на профиле каждого пользователя появятся поля для LinkedIn и GitHub, где они смогут указать ссылки на свои социальные сети.
Пример 4: Добавление контакта для Skype только для администраторов
Этот пример добавляет поле Skype, которое будет доступно только для пользователей с ролью администратора.
add_filter('user_contactmethods', 'add_admin_skype_contact', 10, 2);
function add_admin_skype_contact($methods, $user) {
if ($user && user_can($user, 'administrator')) {
$methods['skype'] = __('Skype');
}
return $methods;
}
Таким образом, поле Skype будет доступно только администраторам, а остальные пользователи не увидят этого поля на странице профиля.
Заключение
Хук user_contactmethods
делает настройку контактных полей гибкой и удобной. С его помощью можно добавить специфические поля для разных ролей и контекстов, а также убрать устаревшие контактные методы, делая профили пользователей более актуальными.