BloGGood.ru

Блог Костаневича Степана

WordPress, PHP, HTML, CSS, Windows

Блог на разные темы, seo-оптимизация, раскрутка сайта, создание сайта, вкусные эффекты для сайта и многое другое…

Главная » Wordpress » Добавляем дополнительные поля в профиль пользователя WordPress

Добавляем дополнительные поля в профиль пользователя WordPress

2016-04-10 / Вр:20:31 / просмотров: 14794

Всем привет!
Сегодня я расскажу, как добавить дополнительные поля в профиль пользователя WordPress.
Не знаю, пригодится ли эта возможность вам, но недавно я делал заказ, где мне нужно было создать дополнительные поля в профиле и вывести всю эту информацию на сайт.
Считаю, что читателями BlogGood.ru будует интересно и полезно ознакомиться с этой процедурой.
Чтобы добавить дополнительные поля в профиль пользователя, откройте файл «function.php» вашей активной темы и…

…вставьте вот такой код перед символом «?>»:

/* добавление поля в профиле*/
add_action( 'show_user_profile', 'add_extra_social_links' );
add_action( 'edit_user_profile', 'add_extra_social_links' );

function add_extra_social_links( $user )
{
?>
<h3>Дополнительные данные пользователя</h3>
<p>здесь будут дополнительные поля</p>
<?php
}

Обратите внимание на строку №8 и №9.
Вот туда будем вставлять дополнительные поля вот такого формата:

<input ENGINE="text" name="НАЗВАНИЕ_ПОЛЯ" value="<?php echo esc_attr(get_the_author_meta( 'НАЗВАНИЕ_ПОЛЯ ', $user->ID )); ?>" class="regular-text" />

НАЗВАНИЕ_ПОЛЯ – замените на любое подходящее название, например, «adress_prof»:

<input type="text" name="adress_prof" value="<?php echo esc_attr(get_the_author_meta( 'adress_prof', $user->ID )); ?>" class="regular-text" />

В итоге, наша общая картина будет выглядеть вот так:

/* добавление поля в профиле*/
add_action( 'show_user_profile', 'add_extra_social_links' );
add_action( 'edit_user_profile', 'add_extra_social_links' );

function add_extra_social_links( $user )
{
?>
<h3>Дополнительные данные пользователя</h3>
<input type="text" name="adress_prof" value="<?php echo esc_attr(get_the_author_meta( 'adress_prof', $user->ID )); ?>" class="regular-text" />
<?php
}

Теперь, чтобы введенная в форму информация сохранялась, сразу после верхнего кода добавьте вот этот код:

// сохранение
add_action( 'personal_options_update', 'save_extra_social_links' );
add_action( 'edit_user_profile_update', 'save_extra_social_links' );

function save_extra_social_links( $user_id )
{
update_user_meta( $user_id,'adress_prof', sanitize_text_field( $_POST['adress_prof'] ) );
}

Обратите внимание на строку №7 на название «adress_prof» – это имя нашего созданного поля. Естественно, если будете создавать новые поля, то придумывайте им уникальные имена.

Чтобы вывести информацию на сайте из этого поля, вставьте в любом месте вашего сайта вот такой код:

<?php echo get_the_author_meta('adress_prof', 1); ?>

Обратите внимание, что здесь тоже есть уникальное имя созданного поля «adress_prof». Я думаю, вы саму суть поняли.
Цифра «1» – это пользователь, ID которого 1. То есть, будет выводиться из поля «adress_prof» только у пользователя с ID=1 (это админ сайта).

Вот такой код я написал в одном из своих заказов:

/* добавление поля в профиле*/
add_action( 'show_user_profile', 'add_extra_social_links' );
add_action( 'edit_user_profile', 'add_extra_social_links' );

function add_extra_social_links( $user )
{
?>
<h3>Дополнительные данные пользователя</h3>

<table class="form-table">
<tr>
<th><label for="adress_prof">АДРЕС</label></th>
<td><input type="text" name="adress_prof" value="<?php echo esc_attr(get_the_author_meta( 'adress_prof', $user->ID )); ?>" class="regular-text" /></td>
</tr>

<tr>
<th><label for="email_prof">КОНТАКТЫ (Email)</label></th>
<td><input type="text" name="email_prof" value="<?php echo esc_attr(get_the_author_meta( 'email_prof', $user->ID )); ?>" class="regular-text" />
<input type="text" name="email_prof2" value="<?php echo esc_attr(get_the_author_meta( 'email_prof2', $user->ID )); ?>" class="regular-text" /></td>
</tr>

<tr>
<th><label for="tel_prof">Технический одел и сервис (тел:.)</label></th>
<td><input type="text" name="tel_prof" value="<?php echo esc_attr(get_the_author_meta( 'tel_prof', $user->ID )); ?>" class="regular-text" />
<input type="text" name="tel_prof2" value="<?php echo esc_attr(get_the_author_meta( 'tel_prof2', $user->ID )); ?>" class="regular-text" /></td>
</tr>

<tr>
<th><label for="tel_prof_zap">Отдел запчастей (тел:.)</label></th>
<td><input type="text" name="tel_prof_zap" value="<?php echo esc_attr(get_the_author_meta( 'tel_prof_zap', $user->ID )); ?>" class="regular-text" /></td>
</tr>

</table>
<?php
}

// сохранение

add_action( 'personal_options_update', 'save_extra_social_links' );
add_action( 'edit_user_profile_update', 'save_extra_social_links' );

function save_extra_social_links( $user_id )
{
update_user_meta( $user_id,'adress_prof', sanitize_text_field( $_POST['adress_prof'] ) );
update_user_meta( $user_id,'email_prof', sanitize_text_field( $_POST['email_prof'] ) );
update_user_meta( $user_id,'email_prof2', sanitize_text_field( $_POST['email_prof2'] ) );
update_user_meta( $user_id,'tel_prof', sanitize_text_field( $_POST['tel_prof'] ) );
update_user_meta( $user_id,'tel_prof2', sanitize_text_field( $_POST['tel_prof2'] ) );
update_user_meta( $user_id,'tel_prof_zap', sanitize_text_field( $_POST['tel_prof_zap'] ) );
}

На сайте выводим вот так:

<p><strong>АДРЕС</strong>
<br><?php echo get_the_author_meta('adress_prof', 1); ?><br><br>
<strong>КОНТАКТЫ</strong><br>
Email: <?php echo get_the_author_meta('email_prof', 1); ?><br>Email: <?php echo get_the_author_meta('email_prof2', 1); ?><br><br><strong>Технический одел и сервис</strong><br>тел.: <?php echo get_the_author_meta('tel_prof', 1); ?><br>тел.: <?php echo get_the_author_meta('tel_prof2', 1); ?><br><strong>
Отдел запчастей</strong><br>тел.: <?php echo get_the_author_meta('tel_prof_zap', 1); ?></p>

Результат в админке:

Добавляем дополнительные поля в профиль пользователя WordPress

Увеличить картинку

Результат на сайте:

Добавляем дополнительные поля в профиль пользователя WordPress

Если вас такой способ не устраивает, можно сделать немножко по-другому, используя фильтр «user_contactmethods». Но не нужно будет писать никаких скриптов для сохранения полей, сам вордпресс обо всем позаботится.
Поля сразу отобразятся в разделе «профиля» под «контактами».

Вот шаблон функции для вставки новых полей:

//======= Новые поля в разделе Контакты =============
function modify_contact_methods( $contact_fields ) {

// Новы поля
// здесь будут новые поля

return $contact_fields;
}
add_filter('user_contactmethods', 'modify_contact_methods');

В строке №5 добавляйте новые поля. Шаблон для добавления полей будет вот таким:

$contact_fields['УНИКАЛЬНОЕ_ИМЯ']  = 'НАЗВАНИЕ ПОЛЯ';

«УНИКАЛЬНОЕ_ИМЯ» – это ID поля. Оно должно быть уникальным и на латинице.
«НАЗВАНИЕ ПОЛЯ» – это название поля для пользователя.  Пишем на любом языке.

Пример:

$contact_fields['contakttel'] = 'Ваш телефон';

Теперь попробуем все на практике. Откройте файл «function.php» вашей активной темы и вставьте вот такой код перед
символом «?>»:

//======= Новые поля в разделе Контакты =============
function modify_contact_methods( $contact_fields ) {

// Новы поля
$contact_fields['twitter'] = 'Twitter';
$contact_fields['facebook'] = 'Facebook';
$contact_fields['gplus'] = 'Google+';
$contact_fields['contakttel'] = 'Ваш телефон';

return $contact_fields;
}
add_filter('user_contactmethods', 'modify_contact_methods');

Итак, я добавил 4 поля, это поле «Twitter», «Facebook», «Google+» и «Ваш телефон» (№5 - №8).

Результат в админке:

Добавляем дополнительные поля в профиль пользователя WordPress

Чтобы вывести на сайте информацию из формы, воспользуйтесь вот таким шаблоном (код вставляете в файлах сайта, где выводится информация, например, в футере):

<?php echo get_the_author_meta('УНИКАЛЬНОЕ_ИМЯ', 1); ?>

«УНИКАЛЬНОЕ_ИМЯ» – это ID поля.
«1» – это ID пользователя, информацию которого нужно вывести на сайте. В данном случае это информация администратора сайта.

Попробуем вывести на сайте все поля, которые я создал:

<?php
echo "Twitter админа".get_the_author_meta('twitter', 1);
echo "facebook админа".get_the_author_meta('facebook', 1);
echo "Google+".get_the_author_meta('gplus', 1);
echo "Телефон админа".get_the_author_meta('contakttel', 1);
?>

На сайте отобразится вся информация, которую вы ввели в эти поля. Удачи!

Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓

Получай обновления блога!!! Подпишись:

Популярные статьи:

4 Ответов на комментарий - Добавляем дополнительные поля в профиль пользователя WordPress

  1. Антон

    А если в профиле пользователя нужно вывести не просто слово, а часть кода. Например, этот код в теге див, который выводит баннер на странице пользователя. Меня бы устроил и шорткод в поле биографии, но ничего из этого не работает таким способом. Есть ли решение?

  2. Avatar photo Степан => автор блога

    для начала, код на php или javascript?

  3. Виктор

    Здравствуйте интересует возможность добавление полей в профиль Ясненько с возможностью редактирования только администратором админ панели и выводом в профиль участника без возможности редактирования. Информация 2 типа дата и число. Подскажите как реализовать

  4. Ася

    Доброго времени. Подскажите, пожалуйста, а как вывести посты по автору на страницу этого автора. В Записях есть выборка по автору, а вот как посты по этому автору вывести, что-то найти не могу((

    За ранее спасибо :)

Добавить комментарий

;-) :| :x :twisted: :smokes: :smile: :shock: :sad: :rose: :roll: :razz: :pop-corne: :oops: :o :mrgreen: :lol: :idea: :grin: :gazeta: :evil: :cry: :cool: :coffe: :arrow: :???: :?: :!:

Чтобы добавить в комментарий код HTML, PHP, CSS, JavaScript, нужно сделать так: [code] ваш код [/code]

Метки: ,

Мои цели на 2018-2019:

1). Закончить тему «Bootstrap»

2). Закончить тему «Все про PHP и MySQL»

3). Создать портфолио и мини интернет-магазин шаблонов

4). Довести количество статей до 800

5). Добиться посещаемости 3000 человек/сутки

6). Увеличить число подписчиков до 250

Статистика по блогу

Количество записей на блоге: 810
Количество страниц на блоге: 20
Количество рубрик на блоге: 28
Количество меток на блоге: 72
Количество комментариев на блоге: 4716