Добавление дополнительных полей к профилю пользователя

В WordPress не только у записей есть дополнительные поля, но и у пользователей.

Зачем дополнительные поля пользователю? Ну к примеру есть у пользователя такие настройки как Контакты. В контактах есть поля: E-mail, Сайт и несколько дополнительных полей для IM-контактов. Но, нет например Twitter’a, Facebook’a и т.д.

Попробуем исправить это. Используем для примера добавление дополнительного поля – аккаунта в твиттере.

Открываем файл functions.php

Добавляем туда следующий код:

<?php
    function action_show_user_profile($user) {
?>
<h3>Дополнительные контакты</h3>
<table>
    <tr>
        <th><label for="twitter">Twitter</label></th>
        <td>
            <span>http://twitter.com/</span>
            <input type="text" name="twitter" id="twitter" value="<?php echo esc_attr(get_the_author_meta('twitter', $user->ID) ); ?>" />
        </td>
    </tr>
</table>
<?php } ?>

Эта функция будет добавлять дополнительные настройки при редактировании профиля пользователя.

и еще немного кода:

<?php
    function action_user_option_update($user_id) {
        update_usermeta($user_id, 'twitter', ( isset($_POST['twitter']) ? $_POST['twitter'] : '' ) );
    }
?>

Эта функция будет сохранять наши новые настройки.

И наконец делаем несколько хуков:

<?php
    add_action('show_user_profile', 'action_show_user_profile');
    add_action('edit_user_profile', 'action_show_user_profile');
    add_action('personal_options_update', 'action_user_option_update');
    add_action('edit_user_profile_update', 'action_user_option_update');
?>

Первый и второй хук навешивает нашу функцию

action_show_user_profile()

на просмотр и редактирование профиля. Третий и четвертый хук навешивает функцию

action_user_option_update()

на то действие которое происходит когда вы нажимаете на кнопку “Обновить информацию” при редактировании Вашего или чьего-либо профиля.

Вот что у нас получилось:

extra_fileds

Теперь мы смело можем использовать это дополнительное поле при помощи следующего кода:

echo 'http://twitter.com/'.get_the_author_meta('twitter');

которая выведет нам http://twitter.com/наш_твиттер Ну или полный вариант:

echo '<a href="http://twitter.com/'.get_the_author_meta('twitter').'">Follow me!</a>';

Который выведет ссылку на наш аккаунт в твиттере с надписью – Follow me!

Вот и все.